无法在 WinDbg 中加载 SOS

背景: 我是新来的 WinDbg,并试图让它第一次运行。我想检查一下从运行中的 ASP.NET 4站点获取的内存转储,该站点托管在 WindowsServer2008(x86)上的 IIS7中,并下载到我的本地机器上。

我安装了 调试工具并首次启动了 WinDbg,打开了崩溃转储。我去到 文件 | 符号文件路径,设置路径为 *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*,并等待所有的符号加载。

在尝试加载 SOS 时,我遇到了问题。

.loadby sos mscorwks

收到了 Unable to find module 'mscorwks'的回复。

在浏览了网页之后,我试图通过执行以下命令来加载 mscowks..。

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.

我不知道该怎么办。我只想加载求救信号,查查这个转储文件。如果你能帮忙,我将不胜感激。

顺便说一句,我正在尝试打开64位版本的 Windows7和64位版本的 Windbg 的转储文件。

77759 次浏览

CLR 运行时 dll 被重命名为 clr.dll。NET 4.因此,为了加载正确的 SOS 版本,您需要调整您的 .loadby命令。也就是说。

.loadby sos clr

此外,如果你在64位,你应该安装32位版本的 Windows 调试工具以及为了调试32位应用程序。它们并排安装,所以在同一台机器上同时安装32位和64位版本是没有问题的。

我建议不要抄袭 SOS.dll。SOS 需要与框架的精确版本相匹配,所以只要使用 .loadby从框架目录加载它,就可以了。

WinDbg 命令‘ g’的意思是[继续]

因为您打开的是一个转储文件,所以没有办法“继续”,它只包含进程内存。

因此消息“ No 可以逃跑 debug error in‘ g’”在您的情况下是合乎逻辑的,因为该进程不是 跑步

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

. NET 4及更高 。加载索斯

.NET 3.5和2 。加载所以 mssorwks

NET 1.0和1.1 。载入 clr10 sos

刚刚遇到一个类似的问题加载 SOS,并得到“指定的模块无法找到”。想出了一个不同的解决方案,所以如果这里的解决方案对你没有帮助,试试这个:

. loadby 因此无法找到 clr 指定的模块

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

约翰罗宾斯有很好的 文章围绕它,看到微软符号服务器配置在符号文件路径和运行!分析-v 在 windbg 提示符,这将做的技巧,它将下载相关的 sos 文件。 要验证提示符上的 run.chain,您将看到加载的 dll。