.net-4.0 - 无法在 WinDbg 中加载 SOS

标签 .net-4.0 windbg sos

背景:我是 WinDbg 新手,第一次尝试让它运行。我想检查从 Windows Server 2008 (x86) 上的 IIS 7 中托管的正在运行的 ASP.NET 4 站点获取的内存转储,并将其下载到我的本地计算机。

我安装了 debugging tools并首次启动 WinDbg,打开故障转储。我转到文件|符号文件路径并将路径设置为*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*并等待所有符号加载。

当尝试加载 SOS 时,我遇到了问题。首先,我尝试了以下命令...

.loadby sos mscorwks

...并收到响应无法找到模块“mscorwks”

在网上搜索后,我尝试通过执行以下命令来加载 mscorwks...

sxe ld mscorwks.dll
g

...并收到响应“'g'中没有可运行的调试程序错误”

我将SOS.dll(从C:\Windows\Microsoft.NET\Framework\v4.0.30319)复制到WinDbg目录中,然后尝试...

.load sos

...并收到错误...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

我不太确定如何继续。我只想加载 SOS 并挖掘这个转储文件。任何帮助将不胜感激。

仅供引用...我正在尝试使用 64 位版本的 Windbg 在 64 位版本的 Windows 7 上打开转储文件。

最佳答案

CLR 运行时 dll 在 .NET 4 中已重命名为 clr.dll。因此,为了加载正确版本的 SOS,您需要调整 .loadby 命令。即

.loadby sos clr

此外,如果您使用的是 64 位系统,则应安装 32 位版本的 Debugging Tools for Windows以及调试 32 位应用程序。它们并行安装,因此在同一台计算机上同时安装 32 位和 64 位版本没有问题。

我建议不要复制 SOS.dll。 SOS 需要匹配框架的确切版本,因此只要您使用 .loadby 从框架目录加载它,就万事大吉了。

关于.net-4.0 - 无法在 WinDbg 中加载 SOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373683/

相关文章:

windows - Windbg:中断定时器/调度程序中断并打印 EIP

.net - Windows 7 x64 上的 WinDbg x86 .NET 4 应用程序 : Failed to load data access DLL, 0x80004005

Windbg - 倾销 System.Guid

visual-studio-2010 - 用于 x64 调试的 SOS 扩展

c# - 下拉列表数据源并从 C# 添加额外项目

c# - 为什么 "Specified cast is not valid"错误*不*暴露根本原因?

C# - 基类中的调用方法

c# - 如何使用C#在word 2007文档中的特定坐标处插入图片/文本标签?

c++ - 如何在 WinDbg 扩展中基于转储文件内存创建对象?

java - SOS 手电筒 - 如何使用