2012-02-03 77 views
13

我正在嘗試使用WinDBG來分析來自我們的一臺生產機器的故障轉儲。我的問題的根源似乎是我有一個不同於生產機器的.NET框架,只是我不知道如何解決這個問題。當我打開!SYM嘈雜,然後運行!DLK(從SOSEX)我得到以下錯誤,因爲它試圖找到mscordacwks dll的爲什麼WinDBG找不到mscordacwks.dll?

0:000> !dlk 
CLRDLL: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.3623 f:0 
doesn't match desired version 2.0.50727.3607 f:0 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscordacwks_x86_x86_2.0.50727.3607.dll/4ADD5446590000/mscordacwks_x86_x86_2.0.50727.3607.dll not found 
SYMSRV: c:\mysymbols\mscordacwks_x86_x86_2.0.50727.3607.dll\4ADD5446590000\mscordacwks_x86_x86_2.0.50727.3607.dll not found 
CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3607.dll by mscorwks search 
CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3607.dll' on the path 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
DBGHELP: C:\Program Files\Debugging Tools for Windows (x86)\mscorwks.dll - file not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
SYMSRV: http://msdl.microsoft.com/download/symbols/mscorwks.dll/4ADD5446590000/mscorwks.dll not found 
SYMSRV: c:\mysymbols\mscorwks.dll\4ADD5446590000\mscorwks.dll not found 
CLRDLL: Unable to find mscorwks.dll by search 
CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3607.dll, Win32 error 0n2 
Unable to initialize .NET data interface. Version 2.0.50727.3607 of mscordacwks.dll is required. 
Locate and load the correct version of mscordacwks.dll. See documentation for the .cordll command. 

我接過的Mscorwks.dll,mscordawks.dll和sos.dll從生產機器並將它們放置在C:\ mysymbols中。它看起來像WinDBG正在尋找一個DLL裏面的mscorwks DLL。

+1

看起來像分析一個.NET 2.0程序集,但加載的SOS的目標是.NET 4.0。檢出http://stackoverflow.com/questions/4373683/unable-to-load-sos-in-windbg – 2012-02-03 14:07:50

+3

使用「.chain」命令查看加載的擴展的順序。有時會加載兩個版本2.0/4.0 sos dll,這可能會導致問題。 – Naveen 2012-02-03 14:11:52

回答

3

這裏檢查出的文章http://codenasarre.wordpress.com/2011/06/22/sending-an-sos/

然後基本上是試圖左右,我可以移動的符號的每一個化身之後,我發現我能得到這個工作的唯一辦法是複製的Mscorwks.dll,mscordawks。 dll和sos.dll轉換爲C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727

看來,WinDBG對於同一個DLL的多個版本並沒有那麼好。也許我做了一些錯誤的事情,但是直接將dll複製到.NET Framework目錄至少讓我啓動並運行。

+0

這不是因爲WinDbg無法處理mscordacwks.dll的多個版本,而是它使用副設計算法來查詢它們(因爲它有很多修補版本),這是您主動適應的樣式。一旦你習慣了這個事實,你將來不會遇到太多麻煩。 – 2012-03-05 06:35:30

11

這個非常完整的explanation by Doug Stewart幫助我解決了這種情況。

摘要:

  • 獲得來自原系統mscordacwks.dll。
  • 將其重命名爲mscordacwks_AAA_AAA_2.0.50727.xxxx.dll(取決於您的體系結構和特定的框架版本) - 例如mscordacwks_x86_x86_2.0.50727.3607.dll針對問題中的具體情況。
  • 將該文件複製到windbg.exe的目錄中。
+0

經過漫長的一個小時,這讓我工作! – Rots 2013-07-16 02:43:47

+1

@Rots,感謝您回覆! – CodeFox 2013-08-13 14:57:23

+3

謝謝..這也適用於DebugDiag ...複製到C:\ Program Files \ DebugDiag – 2014-02-05 18:50:58

0

除了CodeFox的答案,您需要將mscorwks.dll(或clr.dll,如果您使用的是.NET 4+)的目錄放入WinDbg中的映像文件路徑(關閉文件菜單)。

8

後這2個命令,一切都變得好:

0:000> .symfix 
0:000> .reload 
0

我還發現,使用的WinDbg的64位版本和調試「任何CPU」管理那裏,並設置代碼項目,以「寧可32位「將導致此錯誤。