分析故障转储文件

时间:2013-09-13 06:18:56

标签: c++ visual-studio-2010 windbg dump crash-dumps

我有一个客户的崩溃转储文件,我必须分析。我是崩溃转储分析领域的新手。 (源代码是C ++)。

以下是我的尝试: -

  • 我用MS Visual Studio打开了.dmp文件,表明存在以下错误 - 你无法调试32位进程的64位转储。所以,我想到了WinDbg试一试。

  • 当我在设置符号搜索路径后在WinDbg中打开文件时,我开始获取以下内容 - 调试对象未连接。

有人能指出我正确的方向吗?我应该要求客户从他的观点提供32位转储,还是可以调试此转储文件。

另外,请提供必要的文档以便开始使用。

2 个答案:

答案 0 :(得分:2)

在某种程度上,您可以使用Windbg调试32位进程的64位转储, 通过使用wow64exts。但是,如果可能的话,我认为最好有32位转储。 如果客户可以提供32位转储,请获取它。

以下是wow64exts的示例:

0:008> k
Child-SP          RetAddr           Call Site
00000000`0291f128 00000000`779d263a wow64cpu!CpupSyscallStub+0x2
00000000`0291f130 00000000`7792c4f6 wow64cpu!WaitForMultipleObjects32+0x1d
00000000`0291f1e0 00000000`7792b8f5 wow64!RunCpuSimulation+0xa
00000000`0291f230 000007fe`e51fd6af wow64!Wow64LdrpInitialize+0x435
00000000`0291f770 000007fe`e519c1ae ntdll!_LdrpInitialize+0xde
00000000`0291f7e0 00000000`00000000 ntdll!LdrInitializeThunk+0xe
0:008> .load wow64exts
0:008> !sw
Switched to 32bit mode
0:008:x86> k
ChildEBP RetAddr  
02a1f2dc 7783c752 ntdll_779e0000!NtWaitForMultipleObjects+0xc
02a1f460 75b956c0 KERNELBASE!WaitForMultipleObjectsEx+0x10b
02a1f4d4 75b9586a kernel32!WerpReportFaultInternal+0x1c4
02a1f4e8 75b67828 kernel32!WerpReportFault+0x6d
02a1f4f4 778c07c4 kernel32!BasepReportFault+0x19

答案 1 :(得分:2)

崩溃转储分析最有用的工具是将其加载到Windbg(文件 - >打开崩溃转储),然后使用

!analyze -v

命令。这适用于从实际崩溃站点稍微回退一些启发式算法,以找出可能发生崩溃的原因,例如发生空指针解除引用的位置。有一个很好的教程here。一个非常好的书签网站是John Robbins的blog,其中有很多关于Windbg的精彩文章。