我在尝试使用 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 使用本地版本。
这是因为您正在安装 .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 转储时显式加载它。
您如何尝试WinDbg x64:无法调试故障转储 - 无法加载数据访问 DLL 的步骤?
你应该
那么您很可能会收到一条错误消息,指出 WinDbg 想要该版本的 .NET 4 的 SOS,您可以
我在这篇文章中写了关于如何围绕 WinDbg 和 .NET 准备自己的工具箱。