2016-11-23 52 views
0

我想弄清楚是什麼導致「.NET CLR異常#的例外拋出/秒」我正在按照 How to figure out cause of high number of exceptions中的說明。對於dumpheap命令mscorwks.dll錯誤

我能得到轉儲,但我得到的錯誤,而試圖執行WindDg

!dumpheap -stat -type Exception 

無法找到運行時DLL(的Mscorwks.dll),0x80004005的

機器我拿着轉儲是一個Windows 2012R2 64位我拿了一個w3wp過程轉儲。我用procdump64.exe來轉儲。 對於符號包我在我的Windows 10桌面使用 Windows RT 8.1 ARM, Windows 8.1 and Windows Server 2012 R2

我正在運行的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. 
+0

這可能是Win10的結果,它不再安裝.NET運行庫的v2.0.50272版本。所以沒有sos.dll和mscorwks.dll。 6年來,很多狗生活在免費軟件中。使用控制面板>程序和功能>打開或關閉Windows功能>勾選「.NET Framework 3.5」複選框以安裝它。希望DAC版本是一個匹配,如果不是,那麼告訴你用戶保持他的機器更新。 –

+1

@HansPassant:我會說轉儲包含.NET 4,因爲'.loadby sos clr'命令幾乎成功。所以這可能不是.NET 2的問題。 –

回答

-2

使用的WinDBG與.NET/SOS,我們建議你這樣做所產生的同一服務器上的分析轉儲,或儘可能接近它的複製(例如從圖像)。

即使不同的框架補丁級別也會導致事情失敗,所以基於我的經驗,根本不值得花費這些建議。

+0

有趣的事實:「SOS」調試擴展在它的原始發行版之前驅動它的名稱來自.net的代號。那時.net被稱爲「閃電」,內部調試工具被稱爲「罷工」。當團隊根據原始文件構建擴展的公共版本時,他們稱之爲SOS:Strike之子。 –

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 mscorwkslm 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位擴展。