现象:
使用C#开发了一个小的WinForm程序,在Windows8系统上运行正常,在XP上却无法运行,双击程序图标,没有任何反应。
调试限制条件:
由于XP上不能安装开发环境,所以不能在XP上进行源码级别调试。
分析步骤:
(1)项目属性设置CPU为x86(默认是Any),这样程序在XP上运行时,就会报异常错误提示窗口,内容是 对象引用为空。有反应总比不声不响的死去好,问题是那个对象引用为空?为什么Win8下不报错呢?
(2)逐行注释源代码排查,无果。
(3)查找所有对象引用使用情况,发现在窗口大小改变事件响应方法中有一个对象引用使用前没有判断是否为null。为验证,在Win8下运行程序,正常启动后,调整窗口大小,果然报错。
结论:
在Windows8平台上,应用程序初始化显示窗口时,不会产生“大小改变”事件,而在Windows XP平台上则会产生。无论如何,对象引用使用之前一定要判断是否为空!