1

我有一个来自客户的故障转储文件,我必须对其进行分析。我是崩溃转储分析领域的新手。(源代码是 C++)。

这是我尝试过的: -

  • 我使用 MS Visual Studio 打开了 .dmp 文件,显示以下错误 -您无法调试 32 位进程的 64 位转储。所以,我想WinDbg试一试。

  • 当我在设置符号搜索路径后在 WinDbg 中打开文件时,我开始得到以下信息 - Debuggee 未连接。

谁能指出我正确的方向?我应该要求客户从他的角度提供 32 位转储还是可以调试此转储文件。

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

4

2 回答 2

2

在某种程度上,您可以使用 wow64exts 使用 Windbg 调试 32 位进程的 64 位转储。但是,如果可能的话,我认为最好有一个 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
于 2013-09-13T07:50:31.153 回答
2

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

!analyze -v

命令。这应用了一些启发式方法,从实际的崩溃站点稍微倒退,以找出崩溃的原因可能在哪里,例如发生空指针取消引用的位置。这里有一个很好的教程。一个非常好的书签网站是 John Robbins 的博客,其中有很多关于 Windbg 的精彩文章。

于 2013-09-13T09:17:37.063 回答