轻视WinXPe异常系统健壮性将命悬一线
3.异常处理的几点经验总结
对于许多嵌入式系统而言,要消除所有异常几乎是不可能的,因为嵌入式系统可能是由各种应用程序集成在一起,从而引入未知且无限的交互组合。虽然Windows XPe内核具有内存管理功能,可以检查出应用程序造成的系统异常,抑制由于应用不正常直接破坏系统的危险性。但为了加强Windows XPe的稳定性,程序设计时必须还应考虑到可能发生的异常事件并做出相应的处理。
(1)缩小异常检测范围,启动干净计算机环境
因为引起致命异常错误的情况各不相同,所以解决问题的第一步是缩小范围。为此,可尝试“启动干净”计算机。干净启动故障排除是指尽可能减少由于计算机环境而出现的问题的方法,因为许多异常问题都是由相互冲突的驱动程序、终止并驻留程序 (TSR) 以及其它在计算机启动时加载的设置而引起的。
(2)将异常处理代码和正常流程代码分开
在传统的程序中,错误侦测代码、报告和处理代码经常是象令人迷惑的意大利面条式的混在一起。在Windows XPe系统有一种优雅的解决方案,就是主流程和处理异常情况的代码分开。例如,不要把重要的异常信息放在message中,每个线程需要一个单独的try/catch模块,否则将会丢失异常从而导致非常难处理的问题的出现。还有不要忘记应该经常性的记录Exception.ToString(),而不仅仅是Exception.Message;书写catch(Exception ex)时,尽量描述清楚OutOfMemoryException异常被抛出时代码该如何处理等。
(3)将异常分类,以便快速定位异常
在处理异常的时候,我们可以把异常划分成不同类别或组。例如,某一组别异常中每一个都是表示数组操作的异常:如索引超出数组的范围,要插入的元素是错误的类型,要查找的元素不在数组中等,这样就可以设置某一些函数将处理所有这类的异常,而其它一些函数将处理特殊异常。
总之,最好的方法是在进行系统设计就把异常处理融合在系统中,若嵌入式系统一旦实现,就很难添加异常处理功能。因此从嵌入式项目一开始就应该着手进行异常处理,投入大精力把异常处理的策略融合到嵌入式产品中,增强产品的健壮性。