第一步,有些通过查看蓝屏代码信息即可大致定位出导致蓝屏的代码的位置。因为很多蓝屏代码的参数里都会记录有发生蓝屏时引用的内存位址,譬如:
计算机已经在检测错误后重新启动。检测错误: 0x0000001e (0xc0000005, 0xf7ce8bad, 0x00000000, 0x00e2ddd0).
这里参数0xf7ce8bad即指向了引起例外的代码位置,通过对照系统内核驱动加载地址表,可找到引起该例外的驱动名,然后再根据PE结构内存映射文件的原理,反编译驱动代码后就可从相应的偏移处找到导致蓝屏的驱动程序代码位置。
第二步,对于没有在蓝屏代码的参数里直接指明引用位址的分析,就要通过保存下的DUMP文件来进行调试分析了,譬如:
计算机已经在检测错误后重新启动。检测错误: 0x0000000a (0x0000002c, 0x00000002, 0x00000000, 0x80441a1e)
调试工具可选用Microsoft的Windbg,调试时需要使用对应DUMP系统的符号文件,调试步骤网上有很多详细的介绍,通过一步步的stack trace,就可以找到引起蓝屏的代码位置了。如果需要进行详细的调试,最好不要采用Minidump,而要设置成完全内存转储。
第三步,对于经常发生蓝屏重启的情况,直接使用softice进行动态调试是最简单有效的方法了,在系统里安装上softice以后,如果系统产生了例外,会直接被 softice截获,使用它提供的强大命令体系找出罪魁祸首应该是不成问题的,当然这需要在关机过程中发生蓝屏时softice的驱动还没被卸载掉,否则就需要使用双机进行远程调试了.