无法在WinDbg中加载SOS

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

我安装了debugging工具,并首次启动WinDbg,打开崩溃转储。 我去了File | 符号文件path并将path设置为“* srv * c:\ symbols * http://msdl.microsoft.com/downloads/symbols*”,并等待所有符号加载。

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

.loadby sos mscorwks 

…并收到回应“无法find模块”mscorwks“”。

淘宝网后,我试图通过执行以下命令加载mscorwks …

 sxe ld mscorwks.dll g 

…并收到响应“g中没有可运行的debugging错误”

我将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上打开转储文件。

CLR运行时DLL被重命名为clr.dll与.NET 4.所以为了加载正确版本的SOS您需要调整您的.loadby命令。 即

 .loadby sos clr 

另外,如果你使用的是64位,那么你应该安装32位版本的Windowsdebugging工具 ,以便debugging32位应用程序。 他们并排安装,所以在同一台机器上同时安装32位和64位版本没有问题。

我会反对复制SOS.dll的build议。 SOS需要匹配框架的确切版本,所以只要你使用.loadby从框架目录加载它,你就完成了设置。

WinDbg命令“g”表示[继续]

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

因此,由于进程没有运行 ,消息“在g中没有可运行的debugging错误”是合乎逻辑的。

关于加载正确版本的SOS,根据.NET版本使用以下命令。

.NET 4及更高版本 .loadby sos

.NET 3.5和2 .loadby sos mscorwks

.NET 1.0和1.1 .load clr10 \ sos

刚刚遇到类似的问题加载SOS和正在“指定的模块找不到”。 想出了一个不同的解决scheme,所以如果这里的解决scheme不帮你,试试这个:

.loadby sos clr – 找不到指定的模块

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

JOHN ROBBINS有很好的文章 ,看看微软的符号服务器是在符号文件path中configuration的,然后在windbg提示符下运行!analyze -v,这样做就可以下载相关的sos文件了。 要validation运行.chain的提示,你会看到加载的DLL。