6

我从我们的一个应用程序的崩溃中获得了一个小型转储文件。这是一个 32 位本机应用程序,它在 64 位 Windows 上运行。

如果我将 minidump 文件加载到 WinDbg 中,WinDbg 将不会加载系统 DLL 的符号。我的符号路径配置正确:

_NT_SYMBOL_PATH=SRV*C:\WebSymbols*http://msdl.microsoft.com/download/symbols

...因为 WinDbg 正确加载了在 32 位 Windows 上创建的小型转储的符号。它只是不会为 SysWOW64 目录中的 DLL 加载符号。

我在 32 位 Windows 2003 上尝试了 32 位 WinDbg(来自调试工具 6.9),在 64 位 Windows 2008 上尝试了 64 位 WinDbg(也来自调试工具 6.9)。两者都无法加载符号。这是来自 32 位 WinDbg:

0:014> !sym 嘈杂
嘈杂模式 - 符号提示开启
0:014> .reload
..................................................... .....................................
加载卸载的模块列表
..
SYMSRV: C:\WebSymbols\ntdll.dll\48E714D0170000\ntdll.dll 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/ntdll.dll/48E714D0170000/ntdll.dll 未找到
DBGENG: C:\Windows\SysWOW64\ntdll.dll - 无法从磁盘映射图像。
无法加载映像 C:\Windows\SysWOW64\ntdll.dll,Win32 错误 0n2
DBGENG:ntdll.dll - 部分符号图像加载缺少图像信息
DBGHELP:模块未完全加载到内存中。
DBGHELP:使用调试器提供的数据搜索符号。
SYMSRV:C:\WebSymbols\wntdll.pdb\6686D0C5D0554E14953396093DA218A92\wntdll.pdb 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/wntdll.pdb/6686D0C5D0554E14953396093DA218A92/wntdll.pdb 未找到
DBGHELP:wntdll.pdb - 找不到文件
*** 警告:无法验证 ntdll.dll 的时间戳
*** 错误:模块加载完成,但无法为 ntdll.dll 加载符号
DBGHELP:ntdll - 未加载符号
SYMSRV: C:\WebSymbols\kernel32.dll\48E7156Cf0000\kernel32.dll 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/kernel32.dll/48E7156Cf0000/kernel32.dll 未找到
DBGENG: C:\Windows\SysWOW64\kernel32.dll - 无法从磁盘映射图像。
无法加载映像 C:\Windows\SysWOW64\kernel32.dll,Win32 错误 0n2
DBGENG:kernel32.dll - 部分符号图像加载缺少图像信息
DBGHELP:模块未完全加载到内存中。
DBGHELP:使用调试器提供的数据搜索符号。
SYMSRV:C:\WebSymbols\wkernel32.pdb\B0C3B36CC7EF4F3E9C168E186A5A6FEB2\wkernel32.pdb 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/wkernel32.pdb/B0C3B36CC7EF4F3E9C168E186A5A6FEB2/wkernel32.pdb 未找到
DBGHELP:wkernel32.pdb - 找不到文件
*** 警告:无法验证 kernel32.dll 的时间戳
*** 错误:模块加载完成,但无法为 kernel32.dll 加载符号
DBGHELP:kernel32 - 未加载符号
SYMSRV: C:\WebSymbols\KERNELBASE.dll\48E7156D5a000\KERNELBASE.dll 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/KERNELBASE.dll/48E7156D5a000/KERNELBASE.dll 未找到
DBGENG: C:\Windows\SysWOW64\KERNELBASE.dll - 无法从磁盘映射图像。
DBGENG:KERNELBASE.dll - 部分符号图像加载缺少图像信息
DBGHELP:模块未完全加载到内存中。
DBGHELP:使用调试器提供的数据搜索符号。
SYMSRV: C:\WebSymbols\wkernelbase.pdb\A8683F0C515F469B833E3FA562E0DB251\wkernelbase.pdb 未找到
SYMSRV:http://msdl.microsoft.com/download/symbols/wkernelbase.pdb/A8683F0C515F469B833E3FA562E0DB251/wkernelbase.pdb 未找到
DBGHELP:wkernelbase.pdb - 找不到文件
*** 警告:无法验证 KERNELBASE.dll 的时间戳
*** 错误:模块加载完成,但无法为 KERNELBASE.dll 加载符号
DBGHELP: KERNELBASE - 未加载符号

有任何想法吗?这些符号在 Microsoft 的符号服务器上不可用吗?

4

2 回答 2

5

您是在 32 位或 64 位系统上调试,并且使用 32 位或 64 位版本的 WinDBG?您通常必须在从中获取转储的同一架构包上进行调试:

http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

“32 位版本的 Windows 调试工具是最佳选择,除非您在 64 位处理器上调试应用程序。在这种情况下,您应该使用 64 位软件包。”

另外,看看这篇文章,他正在调试一个在 64 位平台上运行的 32 位应用程序:

http://blogs.msdn.com/alejacma/archive/2008/07/18/How-to-use-Windbg-to-debug-a-dump-of-a-32bit-.NET-app-running-on -a-x64-machine.aspx

于 2008-11-05T15:29:45.680 回答
-1

考虑这里提到的解决方法,其中 syswo64\ntdll.dll 被复制到 Syswow64\ntdll32.dll

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98781&wa=wsignin1.0

为我工作。

于 2009-10-12T06:27:37.693 回答