无法在WinDbg中加载SOS

时间:2010-12-07 05:28:48

标签: .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

...并收到回复Unable to find module '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并挖掘这个转储文件。任何帮助将不胜感激。

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

4 个答案:

答案 0 :(得分:197)

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

.loadby sos clr

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

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

答案 1 :(得分:16)

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

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

因此,您的案例中的消息“No runnable debuggees error in'g'”是合乎逻辑的,因为该过程不是正在运行

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

.NET 4及更高版本 .loadby sos

.NET 3.5和2 .loadby sos mscorwks

.NET 1.0和1.1 .load clr10 \ sos

答案 2 :(得分:0)

刚刚遇到一个类似的问题,加载SOS并且正在获取"指定的模块无法找到"。提出了一个不同的解决方案,如果这里的解决方案不能帮助您,请尝试一下:

.loadby sos clr - specified module could not be found

答案 3 :(得分:0)

上面的答案需要改进,因为随着时间的推移事情变得更容易处理sos。

JOHN ROBBINS周围有很好的article,看看微软符号服务器是在符号文件路径中配置并在windbg提示符下运行!analyze -v,这样就可以下载相关的sos文件。 要在提示符上验证运行.chain,您将看到加载的dll。