dumpheap命令的mscorwks.dll错误

时间:2016-11-23 10:34:59

标签: c# .net windbg w3wp

我正在试图找出导致“.NET CLR异常#Exceps Thrown / sec”异常的原因我遵循的说明 How to figure out cause of high number of exceptions

我能够获得转储但是在尝试执行WindDg时遇到错误

!dumpheap -stat -type Exception
  

无法找到运行时DLL(mscorwks.dll),0x80004005

我采取转储的机器是一个Windows 2012R2 64位,我采取了转储w3wp进程。我使用procdump64.exe来进行转储。 对于我使用的符号包  Windows RT 8.1 ARM, Windows 8.1 and Windows Server 2012 R2

我在Windows 10桌面上运行WinDbg

Microsoft (R) Windows Debugger Version 10.0.14321.1024 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\Users\kumar\Desktop\w3wp.exe_161122_083122\w3wp.exe_161122_083122.dmp]
User Mini Dump File with Full Memory: Only application data is available

Comment: '
*** procdump64.exe  2348 -ma -s 5 -p "\.NET CLR Exceptions(w3wp)\# of Exceps Thrown / sec" 100
*** Counter "# of Exceps Thrown / sec" exceeded 100 for 5 seconds. Value: 220'

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
OK                                             E:\Symbols
Symbol search path is: E:\Symbols
Executable search path is: 
Windows 8.1 Version 9600 MP (2 procs) Free x64
Product: Server, suite: TerminalServer DataCenter SingleUserTS
Built by: 6.3.9600.17031 (winblue_gdr.140221-1952)
Machine Name:
Debug session time: Tue Nov 22 14:01:23.000 2016 (UTC + 5:30)
System Uptime: 13 days 23:42:27.204
Process Uptime: 0 days 16:40:05.000
................................................................
................................................................
................................................................
....................................................
Loading unloaded module list
.....................................
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for KERNELBASE.dll - 
ntdll!ZwWaitForSingleObject+0xa:
00007ffe`f39206fa c3              ret
0:000> .load C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll
The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.
0:000> .load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos.dll
0:000> !dumpheap -stat -type Exception
Failed to find runtime DLL (mscorwks.dll), 0x80004005
Extension commands need mscorwks.dll in order to have something to do.
0:000> .loadby sos mscorwks
Unable to find module 'mscorwks'
0:000> .loadby sos clr
The call to LoadLibrary(D:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos) failed, Win32 error 0n126
    "The specified module could not be found."
Please check your debugger configuration and/or network access.

2 个答案:

答案 0 :(得分:1)

您的设置中存在一些问题:

  1. 甚至找不到像ntdll这样的基本符号。您下载的符号的某些内容无法按预期工作。这将使您的所有结果都令人怀疑。请参阅How to set up symbols in Windbg

  2. 你的进程没有使用.NET2,它正在使用.NET 4.你可以从它找到了寻找SOS的路径这一事实看到这一点

      

    d:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ SOS

    问题可能是您没有在D:上安装Windows。使用完整路径来加载.NET 4的SOS扩展。

    在加载任意扩展程序之前,使用lm m clrlm m mscorwks以及lm m coreclr查找已加载的.NET版本。

  3. 关于DAC文件:设置符号后,使用!analyze -v。我已经看到这个下载必要的mscordacwks文件。

    • 如果这不起作用,请从原始计算机获取文件。您可以使用mscordacwks collector(免责声明:我为此专门编写的工具)

    • 如果无法做到这一点,您可以查看mscordacwks and sos archive(免责声明:由我制作的此类文件的集合)

  4. 如果无法加载调试DLL(%1 is not a valid Win32 application),则这是由于位数不匹配造成的。使用64位版本的WinDbg分析64位故障转储和32位版本的WinDbg以进行32位故障转储。在64位WinDbg中使用64位扩展,在32位WinDbg中使用32位扩展。

答案 1 :(得分:-2)

将WinDBG与.NET / SOS一起使用时,建议您在生成转储的同一服务器上进行分析,或尽可能接近再现(例如,从图像中)。

即使不同的框架补丁程序级别也会导致失败,因此根据我的经验,不值得努力对抗建议。