.net 4.0 无法在WinDbg中加载SOS
背景:我是WinDbg的新手,第一次尝试让它运行。我想检查从运行中的ASP.NET 4站点获取的内存转储,该站点位于Windows Server 2008(x86)上的IIS 7中,并下载到本地计算机 我第一次安装并启动了WinDbg,打开了崩溃转储。我转到文件| Symbol File Path并将路径设置为.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时,我遇到了问题。首先,我尝试了以
*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