无法在WinDbg中加载SOS

Kev*_*ock 131 windbg .net-4.0 sos

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

我安装了调试工具并首次启动了WinDbg,打开了故障转储.我去了File | 符号文件路径并设置路径*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*并等待加载的所有符号.

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

.loadby sos mscorwks
Run Code Online (Sandbox Code Playgroud)

......并收到了答复Unable to find module 'mscorwks'.

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

sxe ld mscorwks.dll
g
Run Code Online (Sandbox Code Playgroud)

...并收到响应"'g'中没有可运行的调试对象错误"

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

.load sos
Run Code Online (Sandbox Code Playgroud)

......并收到错误......

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.
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*sen 202

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

.loadby sos clr
Run Code Online (Sandbox Code Playgroud)

此外,如果你是64位,你应该安装32位版本的 Windows调试工具,以便调试32位应用程序.它们并排安装,因此在同一台机器上同时使用32位和64位版本没有问题.

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

  • @Dave:也许太晚了,但根据这里找到的安装网页:http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx你可以选择安装可再发行的软件包,它将MSI放入这里的每个架构版本:C:\ Program Files\Microsoft SDKs\Windows\v7.1\Redist\Windows调试工具 (5认同)
  • 如果我说“.loadby sos clr”,我会得到“无法找到模块“clr””。我正在尝试使用 x64 WinDbg 调试 .NET 4 (2认同)
  • @CsabaToth是转储还是你在现场调试?如果您正在进行实时调试,则可能尚未加载CLR.你可以在加载CLR时停止`sxe ld clr`然后你可以在那时加载SOS. (2认同)

Her*_*art 17

WinDbg命令'g'表示[继续]

由于您正在打开转储文件,因此无法"继续",它只包含进程内存.

因此,在您的情况下,消息" 'g'中没有可运行的调试对象错误"是合乎逻辑的,因为该进程未运行.

关于加载正确版本的SOS,请使用以下命令,具体取决于.NET版本.

.NET 4及更高版本 .loadby sos

.NET 3.5和2 .loadby sos mscorwks

.NET 1.0和1.1 .load clr10\sos