133

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

我安装了调试工具并第一次启动了 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 上打开转储文件。

4

4 回答 4

207

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

.loadby sos clr

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

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

于 2010-12-07T05:31:26.477 回答
18

WinDbg 命令 'g' 表示 [继续]

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

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

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

.NET 4 及更高版本 .loadby sos

.NET 3.5 和 2 .loadby sos mscorwks

.NET 1.0 和 1.1 .load clr10\sos

于 2014-07-29T11:21:31.023 回答
1

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

JOHN ROBBINS 有一篇不错的文章,请参阅 Microsoft 符号服务器已在符号文件路径中配置并在 windbg 提示符下运行 !analyze -v ,这将完成下载相关 sos 文件的技巧。要验证在提示符下运行 .chain,您将看到加载的 dll。

于 2017-05-10T10:48:51.380 回答
0

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

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

于 2016-08-10T15:42:07.803 回答