.net 4.0 无法在WinDbg中加载SOS

.net 4.0 无法在WinDbg中加载SOS,.net-4.0,windbg,sos,.net 4.0,Windbg,Sos,背景:我是WinDbg的新手,第一次尝试让它运行。我想检查从运行中的ASP.NET 4站点获取的内存转储,该站点位于Windows Server 2008(x86)上的IIS 7中,并下载到本地计算机 我第一次安装并启动了WinDbg,打开了崩溃转储。我转到文件| Symbol File Path并将路径设置为*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*并等待加载所有符号 在尝试加载SOS时,我遇到了问题。首先,我尝试了以

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

我第一次安装并启动了WinDbg,打开了崩溃转储。我转到文件| Symbol File Path并将路径设置为
*srv*c:\symbols*http://msdl.microsoft.com/download/symbols*
并等待加载所有符号

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

.loadby sos mscorwks
sxe ld mscorwks.dll
g
…并收到响应
无法找到模块“mscorwks”

在浏览完web之后,我尝试通过执行以下命令加载mscorwks

.loadby sos 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上打开转储文件。

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

.loadby sos clr
此外,如果您使用的是64位,则还应安装的32位版本,以便调试32位应用程序。它们并行安装,因此在同一台机器上同时安装32位和64位版本没有问题


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

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

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

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

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

.NET 4及更高版本.loadby sos

.NET 3.5和2 .按sos mscorwks加载

.NET 1.0和1.1
.load clr10\sos

刚在加载sos时遇到类似问题,并得到“找不到指定模块”。提出了一个不同的解决方案,因此如果这里的解决方案对您没有帮助,请尝试以下方法:


上述答案需要改进,因为随着时间的推移,处理sos加载变得更加容易

约翰·罗宾斯(JOHN ROBBINS)对此很感兴趣,请查看Microsoft symbol服务器在symbol文件路径中配置并运行!在windbg提示符下分析-v,这将完成下载相关sos文件的技巧。
在提示符下验证run.chain,您将看到加载的dll。

我发现在我的系统上获取这两个dll很有挑战性,因为最新的安装程序会自动检测CPU类型。您知道msi有覆盖标志吗?我要安装一个旧的32位版本的WinDbg,但不知道会发生什么。@Dave:可能太少太晚了,但根据此处找到的安装网页:您可以选择安装可再发行的软件包,该软件包将每个架构版本的MSI放在此处:C:\Program Files\Microsoft SDK\Windows\v7.1\Redist\Debugging Tools for Windows如果我说
。loadby sos clr
我得到
无法找到模块“clr”
。我正在尝试用x64调试.NET4WinDbg@CsabaToth它是转储还是正在进行实时调试?如果正在进行实时调试,则CLR可能尚未加载。加载clr后,您可以执行
sxe ld clr
停止,然后您可以在此时加载SOS。@BrianRasmussen这是一个已编译的可执行文件。如果我看一下“模块”窗口,就会加载clr