windbg.exe:无法加载数据访问DLL,0x80004005

时间:2011-09-20 12:23:09

标签: debugging windbg sos postmortem-debugging

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

2 个答案:

答案 0 :(得分:3)

我通过使用ProcDump来获取在64位计算机上运行的32位进程的32位转储来解决该问题。我可以使用32位windbg成功检查。 this blog post中有更多详细信息。

答案 1 :(得分:0)

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

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

至少那是根据博客文章“Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dll?来自黑暗角落博客的笔记。

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

对我来说,这总是因为我没有正确版本的mscordacwks。 windbg也找不到它。请参阅我对Problem debugging hang-dump in windbg的回答,了解我用于从安全补丁中查找/提取正确版本的方法。为了让windbg加载它,我设置windbg的图像路径指向我存储它的目录。