7

我在尝试使用 windbg 调试小型转储文件时遇到了一个非常奇怪的问题。我已经在我自己的机器上尝试过这个,也通过在目标机器上运行 windbg 来进行小型转储,但两种情况下的结果都是一样的。

在开始时,我加载所需的 dll,如下所示,请注意,如果我将 sympath 设置为 microsoft symbols server,则会出现同样的问题。

0:000> .symfix c:\sos

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

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

然后我做一个详细的加载

.cordll -ve -u -l

并收到以下错误消息

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

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

我已经尝试过这里这里建议的方法,但没有任何效果。任何帮助是极大的赞赏。

4

2 回答 2

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 转储时显式加载它。

于 2013-03-07T13:25:09.980 回答
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)。

然后很可能你会收到一条错误消息,说 WinDbg 想要那个版本的 .NET 4 的 SOS,你可以

  1. 从源计算机复制 sos.dll 并将其保存到 C:\temp\sos.dll。
  2. 在 WinDbg 中,不要调用 .loadby sos clr,而是使用 .load C:\temp\sos.dll。
于 2013-03-11T05:59:45.207 回答