【发布时间】:2017-07-12 09:16:48
【问题描述】:
我得到了一个复杂的故障转储:一个(32 位)程序 (C++) 是用 Visual Studio 6 编写的,并在 64 位机器上执行。所以,我得到了一个 64 位的故障转储。 可悲的是,我无法访问 VS 6(而且我认为 VS6 不能处理 64 位)。 VS 2015 无法打开这个故障转储(32 位调试器无法调试 64 位..),所以我用 WinDBG(和我自己的 dmp 文件查看器:) 进行了尝试。
查看堆栈只显示系统地址 (0x7..)。
例如:
. 0 Id: bdc.b40 Suspend: 0 Teb: 00000000`7efdb000 Unfrozen
Start: XXXX+0x4bf33d (00000000`008bf33d)
Priority: 2 Priority class: 128 Affinity: f
# Child-SP RetAddr Call Site
00 00000000`0008e2e8 00000000`73deaedc wow64win!NtUserGetMessage+0xa
01 00000000`0008e2f0 00000000`73e3d18f wow64win!whNtUserGetMessage+0x30
02 00000000`0008e350 00000000`73dc2776 wow64!Wow64SystemServiceEx+0xd7
03 00000000`0008ec10 00000000`73e3d286 wow64cpu!ServiceNoTurbo+0x2d
04 00000000`0008ecd0 00000000`73e3c69e wow64!RunCpuSimulation+0xa
05 00000000`0008ed20 00000000`77c7fb96 wow64!Wow64LdrpInitialize+0x42a
06 00000000`0008f270 00000000`77cdbd09 ntdll!LdrpInitializeProcess+0x17e3
07 00000000`0008f760 00000000`77c6a36e ntdll! ?? ::FNODOBFM::`string'+0x22a30
08 00000000`0008f7d0 00000000`00000000 ntdll!LdrInitializeThunk+0xe
在 ThreadInfoListStream 中甚至没有上面列出的入口点或
0:000> ~*
. 0 Id: bdc.b40 Suspend: 0 Teb: 00000000`7efdb000 Unfrozen
Start: XXXX+0x4bf33d (00000000`008bf33d)
Priority: 2 Priority class: 128 Affinity: f
[..]
出了什么问题/我错在哪里?我该怎么做才能看到整个堆栈?是否有任何帮助/指导如何自行展开堆栈(我能够加载/读取 pdb,我可以访问转储中保存的内存,我已经对 TEB 的主要部分进行了未编码,. ..)。
谢谢
【问题讨论】:
标签: stack windbg crash-dumps postmortem-debugging