无法在 WinDbg 中加载 SOS
Posted
技术标签:
【中文标题】无法在 WinDbg 中加载 SOS【英文标题】:Unable to load SOS in WinDbg 【发布时间】:2011-05-21 09:29:51 【问题描述】:背景:我是 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 并挖掘这个转储文件。任何帮助将不胜感激。
仅供参考...我正在尝试使用 64 位版本的 Windbg 在 64 位版本的 Windows 7 上打开转储文件。
【问题讨论】:
【参考方案1】:使用 .NET 4 将 CLR 运行时 dll 重命名为 clr.dll
。因此,为了加载正确版本的 SOS,您需要调整 .loadby
命令。即
.loadby sos clr
此外,如果您使用的是 64 位,则还应安装 32 位版本的 Debugging Tools for Windows 以调试 32 位应用程序。它们并排安装,因此在同一台机器上同时拥有 32 位和 64 位版本没有问题。
我建议不要复制 SOS.dll。 SOS 需要匹配框架的确切版本,所以只要您使用 .loadby
从框架目录加载它,就可以了。
【讨论】:
我发现在我的系统上同时安装这两种方法具有挑战性,因为最新的安装程序会自动检测 CPU 类型。您是否知道 msi 的覆盖标志?我要安装一个旧的 32 位版本的 WinDbg,但不知道会发生什么。 @Dave:也许太晚了,但是根据此处找到的安装网页:msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx 您可以选择安装可再发行包,它将每个架构版本的 MSI 放在此处:C:\Program Files \Microsoft SDKs\Windows\v7.1\Redist\Windows 调试工具 如果我说.loadby sos clr
我得到Unable to find module 'clr'
。我正在尝试使用 x64 WinDbg 调试 .NET 4
@CsabaToth 是转储还是您正在进行实时调试?如果您正在进行实时调试,则可能尚未加载 CLR。当 CLR 加载完毕后,您可以通过 sxe ld clr
停止,然后您可以在此时加载 SOS。
@BrianRasmussen 这是一个已编译的可执行文件。如果我看一下“模块”窗口,请 clr 它已加载。【参考方案2】:
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
【讨论】:
【参考方案3】:上述答案需要改进,因为随着时间的推移,事情变得更容易处理 sos 加载。
JOHN ROBBINS 周围有很好的article,看到微软符号服务器在符号文件路径中配置并在windbg 提示符下运行!analyze -v,这将完成下载相关sos 文件的技巧。 要验证在提示符下运行 .chain,您将看到加载的 dll。
【讨论】:
约翰·罗宾斯的文章已移至wintellect.com/…【参考方案4】:刚刚在加载 SOS 时遇到了类似的问题,并且出现“找不到指定的模块”。想出了一个不同的解决方案,所以如果这里的解决方案对您没有帮助,试试这个:
.loadby sos clr - specified module could not be found
【讨论】:
以上是关于无法在 WinDbg 中加载 SOS的主要内容,如果未能解决你的问题,请参考以下文章