为什么WinDBG找不到mscordacwks.dll?

问题描述 投票:0回答:5

我正在尝试使用 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。

.net windbg sos debugdiag
5个回答
13
投票

Doug Stewart 的这个非常完整的解释在这种情况下帮助了我。

总结:

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

11
投票
执行这 2 个命令后,一切就OK了:

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

3
投票
我还发现,使用 64 位版本的 Windbg 并调试“任何 CPU”托管代码项目(其中构建设置为“首选 32 位”)将导致此错误。


3
投票
查看此处的文章后

http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

然后基本上尝试了我能做到的每一种移动符号,我发现我能做到这一点的唯一方法是将 mscorwks.dll、mscordacwks.dll 和 sos.dll 从生产计算机复制到 C:\WINDOWS \Microsoft.NET\Framework 2.0.50727

WinDBG 似乎不能很好地处理同一 DLL 的多个版本。也许我做错了什么,但将 dll 直接复制到 .NET Framework 目录至少让我启动并运行。


0
投票
除了 CodeFox 的答案之外,您还需要将 mscorwks.dll(或 clr.dll,如果您使用的是 .NET 4+)所在的目录放入 WinDbg 中的图像文件路径(位于“文件”菜单中)。

© www.soinside.com 2019 - 2024. All rights reserved.