4

我正在尝试从在 x64 机器上运行的进程调试 32 位进程转储。我在 x64 笔记本电脑上运行 x86 版本的 windbg。我已经遵循了这里的建议,但我仍然得到这个:

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已成功加载,但我仍然收到错误消息。我错过了什么?

4

2 回答 2

3

我通过使用ProcDump获取在 64 位机器上运行的 32 位进程的 32 位转储解决了这个问题。我可以使用 32bit windbg 成功地检查它。此博客文章中有更多详细信息。

于 2011-10-29T22:34:21.377 回答
0

看起来您有一个 32 位转储文件 - 否则错误看起来像

CLR DLL status: ERROR: Unable to load DLL mscordacwks_AMD64_x86_2.0.50727.3053.dll, Win32 error 0n87

至少这是根据博客文章“加载数据访问 DLL 失败,0x80004005”——或者——什么是 mscordacwks.dll?在一个黑暗角落博客的笔记上。

请注意错误消息中 AMD64_x86 与 x86_x86 的混合。

对我来说,总是因为我没有正确版本的 mscordacwks。也有可能windbg找不到。有关我用来从安全补丁中查找/提取正确版本的一种方法,请参阅我对在 windbg 中调试挂起转储的问题的回答。为了让 windbg 加载它,我将 windbg 的图像路径设置为指向我存储它的目录。

于 2011-10-06T17:24:31.200 回答