对于windows程序员来说,程序运行时蓝屏是最郁闷的事情,如何找到蓝屏的原因则是首要解决的事情,好在微软提供了一系列的方法,为我们调试蓝屏提供了便利。
首先要用的工具是windbg,可以到微软的官方网站下载
http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.402.msi
再需要下载并安装一个符号链接库,微软官方网站也有提供,这个要根据你所调试系统的版本来选择
http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#d
也可以不下载这个符号库,直接让windbg自己去网上下符号链接信息。
工具软件准备好了,就可以开始设置了,首先进入 “我的电脑”->“属性”->“高级”,选择“启动和故障恢复”选项卡,在“写入调试信息”一栏选择dump文件的转储方式,在“转储文件”中填入dump文件的保存路径。当出现蓝屏时,系统就会保存现场,将dump时的运行信息保存起来,以便我们用windbg来分析。有一条要注意,如果选择了完全内存转储,系统将会把内存中的所有信息都存进文件中,这会相当缓慢,所以你能看到蓝色屏幕上有一个跳动的数字,那就是保存的进度,必须耐心等待它保存到100%。
当蓝屏再次发生的时候,我们手上就有了dump文件了,通常在windows目录下的MEMORY.DMP,或者在windows下的miniDump文件夹中,以*.dmp的形式保存。把.dmp文件拷贝出来,就可以用windbg来调试。
首先,需要设置一下windbg的符号库,进入windbg的"File"->"Symbol File Path",在对话框的“symbol path”里面输入刚才下载的符号库的安装目录,最省心的方法是在这里填入SRV*c:/temp*http://msdl.microsoft.com/download/symbols就可以让windbg自动去下载所需要的符号信息。
将这里设置完,就可以开始调试.dmp文件了,打开“File”->“Open Crase Dump”,选择一个.dmp文件,windbg就开始下载符号库并进行初步的分析,当出现
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
BugCheck 1000007F, {8, f772ffe0, 0, 0}
Probably caused by : bxnd52x.sys ( bxnd52x+365f )
Followup: MachineOwner
---------
就可以在下面的输入框中敲入
!analyze -v;r;kv;lmtn;.logclose;
回车后就可以看到结果,比如我这里看到
BUGCHECK_STR: 0x7f_8
CUSTOMER_CRASH_COUNT: 3
DEFAULT_BUCKET_ID: DRIVER_FAULT_SERVER_MINIDUMP
CURRENT_IRQL: 2
LAST_CONTROL_TRANSFER: from 00000000 to f759a65f
STACK_TEXT:
f78dc000 00000000 00000000 00000000 00000000 bxnd52x+0x365f
STACK_COMMAND: kb
FOLLOWUP_IP:
bxnd52x+365f
f759a65f 53 push ebx
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: bxnd52x+365f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: bxnd52x
IMAGE_NAME: bxnd52x.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 44a55446
FAILURE_BUCKET_ID: 0x7f_8_bxnd52x+365f
BUCKET_ID: 0x7f_8_bxnd52x+365f
Followup: MachineOwner
---------
说明蓝屏可能是由于bxnd52x.sys驱动的问题造成的,上网百度了一下,这个 bxnd52x.sys是网卡驱动,下载了一个更高版本的驱动重新安装,蓝屏的问题就解决了。