为什么WinDBG找不到mscordacwks.dll?

时间:2012-02-03 14:05:15

标签: windbg sos debugdiag

我正在尝试使用WinDBG来分析我们其中一台生产机器的崩溃转储。我的问题的根源似乎是我有一个不同于生产机器的.NET框架版本,只是我不知道如何解决问题。当我转!sym吵闹然后运行!dlk(来自SOSEX)我得到以下错误,因为它试图找到mscordacwks dll

0:000> !dlk
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0
doesn't match desired version 2.0.50727.3607 f:0
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found
SYMSRV:  c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found
SYMSRV:  c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found
CLRDLL: Unable to find mscorwks.dll by search
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required.
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command.

我从生产机器上获取了mscorwks.dll,mscordawks.dll和sos.dll,并将它们放在C:\ mysymbols中。看起来WinDBG正在寻找mscorwks dll中的dll。

5 个答案:

答案 0 :(得分:11)

在这种情况下,这个非常完整的explanation by Doug Stewart帮助了我。

要点:

  • 从原始系统获取mscordacwks.dll。
  • 将其重命名为mscordacwks_AAA_AAA_2.0.50727.xxxx.dll(取决于您的体系结构和特定框架版本) - 例如mscordacwks_x86_x86_2.0.50727.3607.dll针对问题中的具体案例。
  • 将该文件复制到windbg.exe
  • 目录中

答案 1 :(得分:8)

在这2个命令之后,一切都变好了:

0:000> .symfix
0:000> .reload

答案 2 :(得分:3)

在此处查看文章http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

之后

然后我基本上尝试了每一个移动符号的化身,我发现我能使这个工作的唯一方法是将mscorwks.dll,mscordawks.dll和sos.dll从生产机器复制到C: \ Windows \ Microsoft.NET \框架\ V2.0.50727

似乎WinDBG在同一DLL的多个版本中表现不佳。也许我做错了什么,但是直接将dll复制到.NET Framework目录至少让我开始运行。

答案 3 :(得分:1)

我还发现使用64位版本的windbg并调试“Any CPU”托管代码项目,其中构建设置为“prefer 32 bit”将导致此错误。

答案 4 :(得分:0)

除了CodeFox的答案之外,您还需要将mscorwks.dll(或者如果您使用.NET 4+的clr.dll)放在WinDbg中的图像文件路径中的目录(关闭)文件菜单)。