【发布时间】:2011-09-20 12:23:09
【问题描述】:
我正在尝试从运行在 x64 机器上的进程调试 32 位进程转储。我在 x64 笔记本电脑上运行 x86 版本的 windbg。我遵循了here 的建议,但我仍然得到这个:
0:000> .cordll -ve -u -l
CLR DLL status: No load attempts
0:000> !clrstack
CLRDLL: C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.17020 f:8
doesn't match desired version 4.0.30319.237 f:8
CLRDLL: Loaded DLL c:\symbols\public\mscordacwks_x86_x86_4.0.30319.237.dll\4DD234A8670000\mscordacwks_x86_x86_4.0.30319.237.dll
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
2) the file mscordacwks.dll that matches your version of clr.dll is
in the version directory
3) or, if you are debugging a dump file, verify that the file
mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path.
4) you are debugging on the same architecture as the dump file.
For example, an IA64 dump file must be debugged on an IA64
machine.
You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll. .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.
If you are debugging a minidump, you need to make sure that your executable
path is pointing to clr.dll as well.
据我所知,mscordacwks_x86_x86_4.0.30319.237.dll 已成功加载,但我仍然收到错误消息。我错过了什么?
【问题讨论】:
-
您是如何创建转储文件的?如果您在 64 位机器上使用默认工具,您会得到 64 位进程的转储,包括所有 WoW64 内容。
-
我在 64-box 上使用了 process-explorer,右键单击。我假设转储 32 位进程会产生 32 位转储,即使它在 64 位机器上运行?
-
您在加载 SOS 时是否遇到任何错误?如果您希望我发布有关如何处理 Wow64 位转储的答案或评论,请告诉我。
-
64-box 上的 process-explorer 产生 32 位进程的 64 位转储
-
@plodoc 是的,除非您从 \Windows\SysWOW64 目录启动进程资源管理器。
标签: debugging windbg sos postmortem-debugging