windbg生成和分析dump

记录一下使用windbg.exe生成和分析dump文件的过程:

1,在 客户机 的注册表中配置调试工具为windbg.exe,具体方法见上面文章。

2,配置完成后,在 客户机 运行程序,使程序崩溃。如下:下面的例子是除0崩溃的例子。

windbg生成和分析dump_第1张图片

输入0后,程序崩溃,跳出windbg工具的界面:

windbg生成和分析dump_第2张图片

3,在工具栏点击如图所示的按钮 

     或者在命令窗口输入g,然后回车,使程序运行,如下图:windbg生成和分析dump_第3张图片

4,生成dump文件。

在命令窗口输入 .dump /ma c:\fullTest.dump (dump文件中包含完整的信息),或者

在命令窗口输入.dump c:\miniTest.dump(dump文件是压缩的)。

5,完成后,将在c盘目录下,生成两个文件。

windbg生成和分析dump_第4张图片这个两个文件只需一个即可。将其中一个发给程序的开发者。

下面是分析dump文件:

1,程序的开发者收到dump文件后,将其保存到电脑某个目录下。

2,程序的开发者肯定有源代码,打开windbg.exe,配置符号文件路径,即pdb文件的路径

windbg生成和分析dump_第5张图片windbg生成和分析dump_第6张图片

3,配置源文件的路径。.cpp的路径。

windbg生成和分析dump_第7张图片windbg生成和分析dump_第8张图片

4,打开  dump文件  

windbg生成和分析dump_第9张图片

即可在windbg.exe中显示 崩溃代码的位置:

windbg生成和分析dump_第10张图片

 

然后通过下面的命令分析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

你可能感兴趣的:(windbg生成和分析dump)