`
javahigh1
  • 浏览: 1288549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

本周GC07:关于异常

阅读更多

原本有两套底层库,NF3D和GC,各有千秋,07年正在按照他们,做一个统一的底层库GC07,主要是方便自己的实践,同时不要太依赖于DX的框架集。由于看OGRE的代码中遍地异常,所以一直被它牵引着,希望也来实现一套异常。经过这两天的查找和讨论,最终决定放弃这个想法了。

诚然,异常有很多好处,但是,在工程中,异常也有很多难以克服的硬伤。

第一,如果用异常的方式来控制错误,对库的使用者提出了较高要求。库的使用者必须考虑到很多问题,否则就只能使用库自带的异常处理(如果有的话)。而且,异常本身还有诸多限制,例如:不能在析沟函数中跑出异常等等。

第二,异常并不会使程序更安全,它只不过是提醒的一种手段和一种特殊的格式。switch case容易忘掉某些错误(比如新加了几个错误代码,原有调用这个函数的地方都必须记得去改,如果不改,可能一开始没有什么错误,但是一出错就会很严重),而异常打死都忘不了(马上就是个弹出框,除非瞎子,否则死都忘不掉)。这是异常的一个优点,但是,无论异常还是SC,都不会让程序更安全,该挂还是挂。把心态放到这个上面,不如去想如何写这样的代码:即便发生了错误,但一切都还正常,只是逻辑不对而已。而要完成这个工作,主要靠的是垃圾回收和Count Ptr,无论异常还是返回值都得靠边站。

第三,异常可以让程序代码和错误处理代码完全分开,但这个,对于一个使用异常的高手而言是一个好处,对一个不那么高的来说,则可能是个噩梦。在一个底层库抛出的异常,经由一个没有Catch的中间层,传递到用户手里,有时候,用户希望函数虽然错误,但是仍能完成一些功能,但现在,一切都将从Catch后开始,中间跳过了哪些逻辑?这个是很难管理的。特别是当代码越来越紊乱的时候,即便一位高手能保证底层库的安全,但是,能保证中间层的提供者也是一样的高手吗?

第四,异常不可以跨越语言,当然,SEH可以,但SEH不跨平台。在VC下抛出的异常,在BCB下完全无法Catch,更不要提什么C#了。这样,当你做库的Wrapper的时候,不得不catch所有的异常并将它们转化成返回值……除非能保证两个人使用同样的C编译器,否则,VC下面编译的底层库将无法由其他C++编译器提供中间层插件和工具。甚至VC7和VC6都不能在一起工作,这对于一个设计为类COM结构的库不啻为一个重大打击。

GC07准备沿用返回值的做法,同时对主要指针实行Count Ptr管理,并对Memory提供基本的监控手段。异常相关的方面,仅是在少数不得不抛的地方(致命错误)抛出少量互不相干的异常。另外就是在不影响效率的前提下,对SEH和C++异常进行Catch和“无公害化”处理。对于极少数致命错误,则通过记录程序栈的方式,给出尽可能多的信息以供快速定位。

有错误和不足的地方,希望大家帮忙,谢谢大家 ^_^

分享到:
评论

相关推荐

    gcviewer监控gc工具

    1. **实时监控**:GCViewer能够实时更新GC日志中的信息,动态显示GC事件,使开发者能够及时发现异常情况。 2. **图表展示**:通过折线图、柱状图等形式,清晰展示不同GC代(如新生代、老年代)的内存使用情况,以及...

    GC9A01芯片资料TFTLCD

    GC9A01芯片资料TFTLCD GC9A01芯片是是一种a-Si TFT LCD单片驱动器,具有240RGBx240的分辨率。下面是对GC9A01芯片的详细介绍: 1. 简介 GC9A01是一种高性能的a-Si TFT LCD单片驱动器,专门为小尺寸液晶显示器设计...

    GC0308_MTK_6253_DRV_V1.1.0_GC0308驱动_

    标签"GC0308驱动"进一步确认了该压缩包内容的核心是关于GC0308图像传感器的驱动程序。 压缩包子文件"GC0308_MTK_6253_DRV_V1.1.0"可能是包含所有驱动程序文件的单一文件,或者是一个文件夹,其中包含了安装或更新...

    MT65xx_GC032A_Driver_20170614_GC032A_GC032A_Drive

    《MT65xx_GC032A_Driver_20170614_GC032A_GC032A_Drive》是一款专为MT65xx平台设计的GC032A图像传感器驱动程序,它在原有的厂家驱动基础上进行了一些定制化的改进,以优化性能和效果。此驱动程序的更新日期为2017年6...

    GC9503V-DS IC规格书

    5. **配置与控制**:规格书会提供关于如何配置和控制GC9503V的信息,包括寄存器映射、初始化序列、命令集等,这些对于编写驱动程序至关重要。 6. **故障诊断与调试**:GC9503V可能会有内置的状态指示和错误检测机制...

    GC9300,GC9306,ST7789,HX8357C屏驱动.rar

    一个成功的加载过程意味着驱动可以正确地控制屏幕,显示清晰且无异常。 在实际应用中,这些驱动程序可能需要根据具体硬件配置和操作系统进行调整。开发者可能需要修改或扩展驱动以适应特定的需求,如添加触控功能、...

    STM32C8T6+GC9106 1.77寸液晶_GC9106_GC91061.77寸液晶_stm32c8t6_

    4. **错误处理和异常恢复**:增加错误检测和处理机制,提高系统稳定性。 5. **电源管理**:根据应用需求,设计合适的电源管理策略,降低功耗。 6. **固件升级**:设计和完善固件升级机制,方便未来功能更新或修复...

    mtk GC02M2驱动

    【标题】"mtk GC02M2驱动" 指的是针对MT6762处理器平台的GC02M2摄像头模块的驱动程序。在IT行业中,驱动程序是操作系统与硬件设备之间的桥梁,它允许操作系统和软件应用程序有效通信并控制硬件设备。MT6762是一款由...

    GC9B71驱动320x360,G改自GC9A01

    最近项目用到一个320*360像素彩屏,驱动是GC9B71,网上相关资料甚少,原厂提供的demo屏是亮了,但是显示异常,颜色对不上,offfset偏移没有、屏幕旋转功能没有,无奈只能自己根据厂家提供的规格书自己调整,代码已...

    年轻代gc jvm crash

    在Java虚拟机(JVM)中,垃圾收集(GC)是自动管理内存的重要机制,它负责清理不再使用的对象,以防止内存泄漏。"年轻代GC"是指发生在JVM内存结构中的年轻代区域的垃圾回收过程。年轻代主要分为 Eden区、Survivor区...

    com-sun-tools-visualvm-modules-visualgc.rar

    VisualGC可以帮助监控这些区域的使用情况,防止因空间不足导致的异常。 2. **垃圾收集器的工作状态**: - VisualGC可以展示不同类型的GC(如Serial、Parallel、Concurrent Mark Sweep等)的运行次数、耗时和效率,...

    IBM gc分析工具 ga441.rar

    gc日志提供了关于JVM内存使用情况的详细信息,包括对象的创建、存活和销毁过程。通过分析这些日志,我们可以识别出可能导致性能问题的模式,例如频繁的垃圾收集、长时间的暂停时间(stop-the-world事件)等。 IBM的...

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...

    gc-ms 操作手册

    3. **GC主体电源开启**:在GC(气相色谱仪)主体的正面左下角开启电源,并进行GC的自检,确保无异常。 4. **MSD电源开启**:在MSD(质谱仪)面板下方开启电源,为MSD部分做好准备。 5. **软件启动**:待GC与MSD开机...

    DPtech ADX3000-GC

    根据提供的文件信息,我们可以详细解析并总结出关于DPtech ADX3000-GC应用交互交换网关的重要知识点。 ### 产品概述 DPtech ADX3000-GC应用交互交换网关是一款高性能、高可靠性的网络设备,旨在满足现代企业对于...

    GC:乱码电路

    同时,理解如何配置和调整JVM的GC参数也是避免此类问题的重要步骤,因为错误的GC设置可能会导致程序性能下降甚至出现异常。 为了更好地诊断和解决问题,开发者应该: - 使用统一的编码格式,如UTF-8,作为默认的...

    GC5883:用于控制 HMC5883L 的库

    《HMC5883L控制库GC5883详解》 在现代电子设备中,传感器技术扮演着至关重要的角色。HMC5883L是一款由Analog Devices公司生产的三轴磁阻传感器,主要用于测量地球磁场,常应用于指南针、无人机导航等领域。为了方便...

    步进电机驱动芯片GC8549(LV8549)

    **GC8549**是一款高性能的双通道12V直流电机驱动芯片,适用于各种低压或电池供电的运动控制应用,如摄像机、DSLР镜头、玩具、机器人、共享单车锁、水表开关以及医疗设备等。它具备了高效能、低功耗和全面的保护功能...

    DENON天龙AH-GC30操作说明书.pdf

    手册中的故障排除部分列出了可能遇到的问题及解决方法,如无法开机、充电问题、无声音、音质异常、蓝牙播放问题、电话通话障碍等,帮助用户快速诊断并解决问题。 **十二、使用注意事项** 在使用过程中,请遵循预防...

    GC9106_GC9106_GC9106初始化.zip

    - 初始化过程中需确保电源稳定,防止因电压波动导致的异常。 - 在配置外设时,需注意数据手册中的寄存器配置,避免错误操作导致硬件损坏。 - 遵循良好的编程规范,使代码可读性、可维护性更强。 通过深入理解并...

Global site tag (gtag.js) - Google Analytics