无法读取 windbg 中的故障转储
Posted
技术标签:
【中文标题】无法读取 windbg 中的故障转储【英文标题】:Unable to read crash dump in windbg 【发布时间】:2011-11-17 13:45:15 【问题描述】:我的程序中出现 *** 异常,该异常可能源自第三方库 microsoft.sharepoint.client.runtime.dll。
使用adplus
创建故障转储,我面临的问题是,当我在windbg 中打开它时,我很难从中获取任何信息。这是我得到的回应:
> 0:000> .restart /f
Loading Dump File [C:\symbols\FULLDUMP_FirstChance_epr_Process_Shut_Down_DocumentumMigrator.exe__0234_2011-11-17_15-19-59-426_0d80.dmp]
User Mini Dump File with Full Memory: Only application data is available
Comment: 'FirstChance_epr_Process_Shut_Down'
Symbol search path is: C:\symbols
Executable search path is:
Windows 7 Version 7601 (Service Pack 1) MP (8 procs) Free x64
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Machine Name:
Debug session time: Thu Nov 17 15:19:59.000 2011 (UTC + 2:00)
System Uptime: 2 days 2:44:48.177
Process Uptime: 0 days 0:13:05.000
.........................................WARNING: rsaenh overlaps cryptsp
.................WARNING: rasman overlaps apphelp
......
..WARNING: webio overlaps winhttp
.WARNING: credssp overlaps mswsock
.WARNING: IPHLPAPI overlaps mswsock
.WARNING: winnsi overlaps mswsock
............
wow64cpu!CpupSyscallStub+0x9:
00000000`74e42e09 c3 ret
关于如何从转储中获取更多信息,或者如何使用它来查找我的 *** 错误发生的位置有什么想法吗?
【问题讨论】:
【参考方案1】:您面临的问题是该进程是 32 位的,但您在 64 位上运行,因此您的转储是 64 位转储。要使用转储,您必须运行以下命令:
.load wow64exts
.effmach x86
!analyze -v
最后一个命令应该给你一个有意义的堆栈跟踪。
【讨论】:
好的,抱歉回复晚了,我发现了问题,但这应该对我有帮助......但你的想法似乎不错 刚才对我有帮助!非常感谢:)【参考方案2】:此页面提供了许多有用的信息和分析问题的方法。 http://www.dumpanalysis.org/blog/index.php/2007/09/11/crash-dump-analysis-patterns-part-26/
【讨论】:
【参考方案3】:您没有提及您的代码是托管的还是非托管的。假设它是不受管理的。在调试器中:
.symfix
.reload
~*kb
查看所有线程的调用堆栈并识别导致 SO 的线程。用 SO 很容易识别线程,因为调用堆栈会特别长。使用命令~<N>s
切换到该线程,其中是线程号,使用命令k 200
转储更多的调用堆栈以转储多达200 行的调用堆栈。在调用堆栈的最底部,您应该能够看到产生嵌套循环的代码。
如果您的代码是托管的,请使用SOS 扩展来转储调用堆栈。
【讨论】:
以上是关于无法读取 windbg 中的故障转储的主要内容,如果未能解决你的问题,请参考以下文章
WinDbg 加载符号需要很长时间;正在搜索大型网络 UNC 符号存储中的每个目录
故障转储 - WinDbg - 强制 PDB 文件匹配不起作用?
如何使用 WinDbg 分析 VC++ 应用程序的故障转储?