记录一下使用windbg.exe生成和分析dump文件的过程:
1,在 客户机 的注册表中配置调试工具为windbg.exe,具体方法见上面文章。
2,配置完成后,在 客户机 运行程序,使程序崩溃。如下:下面的例子是除0崩溃的例子。
输入0后,程序崩溃,跳出windbg工具的界面:
3,在工具栏点击如图所示的按钮 ,
或者在命令窗口输入g,然后回车,使程序运行,如下图:
4,生成dump文件。
在命令窗口输入 .dump /ma c:\fullTest.dump (dump文件中包含完整的信息),或者
在命令窗口输入.dump c:\miniTest.dump(dump文件是压缩的)。
5,完成后,将在c盘目录下,生成两个文件。
这个两个文件只需一个即可。将其中一个发给程序的开发者。
下面是分析dump文件:
1,程序的开发者收到dump文件后,将其保存到电脑某个目录下。
2,程序的开发者肯定有源代码,打开windbg.exe,配置符号文件路径,即pdb文件的路径。
3,配置源文件的路径。.cpp的路径。
4,打开 dump文件
即可在windbg.exe中显示 崩溃代码的位置:
然后通过下面的命令分析dump文件:
k:查看堆栈
0038fda0 01302f6e demo1!main+0x10d [e:\c++实例\第07章vc++实战调试技巧\demo\demo1\demo1.cpp @ 52]
0038fdb4 01302dd0 demo1!invoke_main+0x1e [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 64]
0038fe0c 01302c6d demo1!__scrt_common_main_seh+0x150 [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 253]
0038fe14 01302f88 demo1!__scrt_common_main+0xd [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 296]
*** ERROR: Symbol file could not be found. Defaulted to export symbols for kernel32.dll -
0038fe1c 75ed33aa demo1!mainCRTStartup+0x8 [f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp @ 17]
WARNING: Stack unwind information not available. Following frames may be wrong.
0038fe28 77699f72 kernel32!BaseThreadInitThunk+0x12
0038fe68 77699f45 ntdll!RtlInitializeExceptionChain+0x63
0038fe80 00000000 ntdll!RtlInitializeExceptionChain+0x36
lsa:查看崩溃点。 例 lsa main+0x10d(这个就是堆栈第一行的地址)
48: cin >> im;
49: if (im == -1)
50: break;
51:
> 52: int it = 100 / im;
53:
54: cout << it << endl;
55: }
56:
57:
dt :查看结构体变量
dv: 查看局部变量
扩展的分析工具:!analyze -v