Windbg期望mscordacwks.dll的不同版本

时间:2013-03-06 15:16:04

标签: .net debugging windbg

我在尝试使用windbg调试minidump文件时遇到了一个非常奇怪的问题。 我在自己的机器上试过这个通过在目标机器上运行windbg,从中获取minidump,但结果在两种情况下都是相同的。

在开始时我加载了所需的dll,如下所示,请注意,如果我将症状设置为微软符号服务器,则会出现同样的问题。

  

0:000> .symfix c:\ sos

     

0:000> .load C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ sos

检查链条的一切看起来都不错,所以我现在去运行!pe并得到关于mscordacwks的错误,据我所知,这通常表明我使用的是.net框架的错误版本。但是,当我在目标机器上运行它时,情况确实应该不是这样。

然后我做了一个详细的加载

  

.cordll -ve -u -l <​​/ p>

并收到以下错误消息

  

CLRDLL:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscordacwks.dll:4.0.30319.17929 f:8   与所需版本4.0.30319.296不匹配:8

我不明白为什么windbg正在寻找旧版本的mscordacwks?似乎.296版本是从ms符号服务器下载的clr的版本,但我明确地告诉windbg使用本地版本。

我尝试过建议herehere的方法,但没有任何效果。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

这是因为您在安装了.NET 4.5的计算机上调试.NET 4.0转储。底层调试API在4.0和4.5之间发生了显着变化,因此您无法使用.NET 4.5 SOS.dll调试.NET 4.0转储。我所做的是将.NET 4.0 SOS复制到我的winext目录并在我调试.NET 4.0转储时显式加载它。

答案 1 :(得分:9)

您是如何尝试WinDbg x64: Cannot debug a crash dump - failed to load data access DLL的步骤的?

你应该

  1. 从源计算机复制mscordacwks.dll。
  2. 将其重命名为mscordacwks_AMD64_AMD64_4.0.30319.296.dll。
  3. 将此dll删除到WinDbg.exe的文件夹中。
  4. 重新初始化调试会话(关闭并重新打开WinDbg)。
  5. 然后很可能会收到一条错误消息,说WinDbg想要该版本的.NET 4的SOS,你可以

    1. 从源计算机复制sos.dll并将其保存到C:\ temp \ sos.dll。
    2. 在WinDbg中,不要调用.loadby sos clr,而是使用.load C:\ temp \ sos.dll。