Shr*_*ike 42 .net debugging minidump windbg sos
我的一些应用程序出了问题.它是在Windows 2003 Server(x86)中的IIS6下运行的基于wcf的应用程序:
在事件日志中,我从"W3SVC-WP"源(EventID = 2262)得到这样的错误:
ISAPI 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.
Run Code Online (Sandbox Code Playgroud)
我正在尝试弄清楚发生了什么.我已按照此KB中的描述为Orphan Worker Process设置了转储.发生死锁时会创建一个小型转储.
然后我拿这个小型泵试图了解发生了什么.这是我被困住了.
我运行WinDbg x86,打开我的转储然后:
0:037> .loadby sos clr
0:037> .sympath SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
0:037> !clrstack
The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: 4.0.30319.235
CLRDLL: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.235 f:8 doesn't match desired version 4.0.30319.01 f:8
CLRDLL: Loaded DLL c:\temp\symbols\mscordacwks_x86_x86_4.0.30319.01.dll\4BA1D9EF66f000\mscordacwks_x86_x86_4.0.30319.01.dll
OS Thread Id: 0x690 (37)
Unable to walk the managed stack. The current thread is likely not a managed thread.
You can run !threads to get a list of managed threads in the process
Run Code Online (Sandbox Code Playgroud)
如何处理此错误 - "SOS版本与您正在调试的CLR版本不匹配"?
相同的错误("SOS的版本与您正在调试的CLR的版本不匹配")当我在VS2010中打开minidump时我得到了.
我已经阅读了这篇文章 - http://tech-thinker.com/Forums/tabid/62/forumid/12/postid/471/scope/posts/Default.aspx,并尝试安装KB2518870.它没有帮助.
Tho*_*att 44
这对我有用:
下载以下DLL:
从生成转储的计算机上的此文件夹:
C:\ WINDOWS\Microsoft.NET\Framework64\v4.0.30319
运行以下命令.SOS.DLL的路径应该没有引号,未转义的路径分隔符:
.load 路径下载SOS.DLL
我认为这需要一个新的WinDbg会话才能工作.
Pau*_*ams 24
WinDbg将无法使用调试适配器mscordacwks.dll,除非它与原始计算机上的版本相同.您可以通过将此DLL从生成转储的目标计算机复制到您的Debugging Tools for Windows目录来解决此错误.
我们使用WinDbg调试.NET 2.0应用程序.关于mscordacwks_x86_x86_2.0.50727.3615.dll,我们会不断得到同样的错误.我不得不将此文件从服务器复制到我的客户端,并将其放在C:\ Program Files\Debugging Tools for Windows(x86)\文件夹中.之后,WinDbg停止了抱怨.
如果所有其他方法都失败了,您可以尝试使用WinDbg在您从中检索故障转储的同一服务器上进行调试.
Oha*_*der 19
核心问题通常在于不匹配的mscordacwks.dll版本(mscorwks.dll如果采用完全转储则不需要本身).从理论上讲,它应该可以从符号服务器中获得 - 只需运行即可.cordll -ve -u -l.有关详细信息,mscordacwks.dll请参阅无法加载数据访问DLL,0x80004005" - 或 - 什么是mscordacwks.dll.
遗憾的是,某些版本mscordacwks.dll尚未编入索引,这意味着上述内容并不总是有效.在这种情况下,您可以尝试从进行转储的机器上获取正确的版本,如Yocahi和Thomas所述(例如来自C:\Windows\Microsoft.NET\Framework64\v4.0.30319).获得后,发出以下命令加载它:.cordll -u -ve -lp PathToFolderContainingMscorDAC.当然,该机器可能无法访问,或者自卸载之后可能已经修补.
幸运的是,有一种方法可以从实际的更新KB包中提取mscorwdacwks.dll(它驻留在cab自解压可执行文件中的一个文件中 - 使用7-Zip等工具来提取它).还存在.NET更新的存储库(由MS员工Doug Stewart提供),因此您可以浏览它们以获取所需的确切构建号:
一旦你有了正确的mscordacwks.dll,SOS.dll在大多数情况下可以忽略警告,因为SOS.dll尽管有警告,最新的版本大部分时间都可以工作.但是,在某些情况下,SOS.dll还需要正确的版本(作为奖励,你可以摆脱讨厌的警告).Dunken链接到一篇博客文章,在这方面应该是有帮助的(基本上你需要将符号服务器放在_NT_SYMBOL_PATH环境变量中并在!analyze –v 不加载的情况下 运行SOS.dll- 它将自己加载正确的版本).如果这不起作用,您可以尝试SOS.dll从其中一个更新包中提取,如上所述.此站点可能更容易用于此目的,因为它专门为SOS.dll版本编制索引.
最后,考虑PsscorR2(适用于.NET 2.0-3.5)和Psscor4(适用于.NET 4.0).Psscor是一个超集,SOS.dll不会抱怨版本不匹配,只要你使用适当的主要版本.应该注意的是,随着时间的推移,它没有得到维护SOS.dll,因此后者可能包括前者缺少的增强功能和错误修复.在撰写本文时,没有Psscor.NET 4.5的版本.
The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: 4.0.30319.235
Run Code Online (Sandbox Code Playgroud)
这意味着使转储在CLR版本上运行的目标机器 4.0.30319.1.
您的系统正在运行版本4.0.30319.235.
这是因为.Net 4.0的安全更新改变了CLR和SOS文件.有些计算机可能还没有这个更新.
请参阅:http://support.microsoft.com/kb/2572078
这可能会导致堆栈中的某些行有点错误...您可以通过获取原始版本的SOS.dll和CLR.dll以及mscordacwks.dll和mscorwks.dll来避免错误,并在您加载时加载加载SOS.
原始文件通常位于:C:\ Windows\Microsoft.NET\Framework\v4.0.30319
取决于框架版本...然后将它们复制到特定文件夹.
像这样加载正确的文件:
.load C:\CurrectFiles\sos
Run Code Online (Sandbox Code Playgroud)
请注意,它只是"sos"而不是sos.dll.