19

我正在尝试使用 WinDBG 分析来自我们的一台生产机器的故障转储。我的问题的根源似乎是我的 .NET 框架构建与生产机器不同,只是我不知道如何解决这个问题。当我打开 !sym 嘈杂然后运行 ​​!dlk(from 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。

4

5 回答 5

13

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

概括:

  • 从原始系统获取 mscordacwks.dll。
  • 将其重命名为mscordacwks_AAA_AAA_2.0.50727.xxxx.dll(取决于您的体系结构和特定框架版本) - 例如mscordacwks_x86_x86_2.0.50727.3607.dll对于问题中的特定情况。
  • 将该文件复制到windbg.exe.
于 2013-04-26T13:36:28.243 回答
8

在这 2 个命令之后,一切都变得正常:

0:000> .symfix
0:000> .reload
于 2014-12-08T11:31:06.570 回答
3

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

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

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

于 2012-02-03T14:28:58.477 回答
3

我还发现使用 64 位版本的 windbg 并调试构建设置为“首选 32 位”的“任何 CPU”托管代码项目会导致此错误。

于 2017-09-14T20:02:07.407 回答
0

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

于 2014-05-14T18:52:29.530 回答