背景:我是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并挖掘这个转储文件。任何帮助将不胜感激。
Fyi ...我正在尝试使用64位版本的Windbg在64位版本的Windows 7上打开转储文件。
答案 0 :(得分:197)
使用.NET 4将CLR运行时dll重命名为clr.dll
。因此,为了加载正确版本的SOS,您需要调整.loadby
命令。即。
.loadby sos clr
此外,如果您使用64位,则应安装32位版本的Debugging Tools for Windows以便调试32位应用程序。它们并排安装,因此在同一台机器上同时使用32位和64位版本没有问题。
我建议不要复制SOS.dll。 SOS需要匹配框架的确切版本,因此只要您使用.loadby
从框架目录加载它,就可以了。
答案 1 :(得分:16)
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
答案 2 :(得分:0)
刚刚遇到一个类似的问题,加载SOS并且正在获取"指定的模块无法找到"。提出了一个不同的解决方案,如果这里的解决方案不能帮助您,请尝试一下:
答案 3 :(得分:0)
上面的答案需要改进,因为随着时间的推移事情变得更容易处理sos。
JOHN ROBBINS周围有很好的article,看看微软符号服务器是在符号文件路径中配置并在windbg提示符下运行!analyze -v,这样就可以下载相关的sos文件。 要在提示符上验证运行.chain,您将看到加载的dll。