Windbg 需要不同版本的 mscordacwks.dll

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

我在尝试使用 Windbg 调试小型转储文件时遇到一个非常奇怪的问题。 我已经在自己的机器上尝试过此操作,并在获取小型转储的目标机器上运行 Windbg,但两种情况下的结果是相同的。

首先,我加载所需的 dll,如下所示,请注意,如果我将 sympath 设置为 microsoft 符号服务器,则会出现相同的问题。

0:000> .symfix c:\sos

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

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

然后我进行详细加载

.cordll -ve -u -l

并收到以下错误消息

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

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

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

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


9
投票

您如何尝试WinDbg x64:无法调试故障转储 - 无法加载数据访问 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:emp\sos.dll。
  2. 在 WinDbg 中,不要通过 sos clr 调用 .load,而是使用 .load C: emp\sos.dll。

我在这篇文章中写了关于如何围绕 WinDbg 和 .NET 准备自己的工具箱。

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