2013-03-06 47 views
7

我在嘗試使用windbg調試minidump文件時遇到了一個很奇怪的問題。 我已經在我自己的機器&上試過這個,在目標機器上運行windbg,從中獲取小型轉儲,但結果在兩種情況下都是相同的。Windbg希望不同版本的mscordacwks.dll

在開始時我加載瞭如下所示的所需dll,注意如果將sympath設置爲microsoft symbols server,則會發生同樣的問題。

0:000> .symfix C:\ SOS

0:000> .load C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ SOS

檢查鏈一切看起來不錯,所以我現在跑去跑!pe,並得到關於mscordacwks的錯誤,通常,據我所知,這表明我使用的是.net框架的錯誤版本。但是,當我在目標機器上運行時,實際情況不應該如此。

我再做一個詳細的裝載

.cordll -ve -u -l

,並得到以下錯誤消息

CLRDLL:C:\ WINDOWS \微軟.NET \ Framework \ v4.0.30319 \ mscordacwks.dll:4.0.30319.17929 f:8 與所需版本不匹配4.0.30319.296 f:8

我不明白的是爲什麼windbg正在尋找舊版本的mscordacwks?看起來,.296版本是從ms符號服務器下載的clr版本,但我明確告訴windbg要使用本地版本。

我試過了建議的方法herehere但沒有任何效果。任何幫助是極大的讚賞。

+1

在安裝.NET 4.5之後,嘗試使用SOS調試.NET 4應用程序時,似乎有一些與您的問題類似的報告。見例如底部:http://epiwiki.se/tools/windbg/analyze-the-dump-file/failed-to-load-data-access-dll,-0x80004005和中間的:http://www.wintellect.com /cs/blogs/jrobbins/archive/2012/03/08/what-s-new-in-sos-for-net-4-5.aspx – Iridium 2013-03-06 17:30:44

+0

這可以解釋爲最新版本的調試工具的第一件事for windows確實提示你安裝.net 4.5 – Johnv2020 2013-03-06 21:26:51

+0

你正在使用哪個版本的調試工具? – lowleveldesign 2013-03-07 05:43:40

回答

9

這是因爲您正在調試安裝了.NET 4.5的計算機上的.NET 4.0轉儲。基礎調試API在4.0和4.5之間發生了顯着變化,因此無法使用.NET 4.5 SOS.dll調試.NET 4.0轉儲。我所做的是將.NET 4.0 SOS複製到我的winext目錄,並在調試.NET 4.0轉儲時明確加載它。

9

你是怎麼嘗試WinDbg x64: Cannot debug a crash dump - failed to load data access DLL的步驟的?

你都應該

  1. 複製mscordacwks.dll從源計算機。
  2. 將其重命名爲mscordacwks_AMD64_AMD64_4.0.30319.296.dll。
  3. 將此dll拖到WinDbg.exe文件夾中。
  4. 重新初始化調試會話(關閉並重新打開WinDbg)。

然後很可能您會收到一條錯誤消息,說WinDbg希望SOS適用於該版本。NET 4,你可以

  1. 從源機複製sos.dll並保存到C:\ temp \ sos.dll。
  2. 在WinDbg中,不是調用.loadby sos clr,而是使用.load C:\ temp \ sos.dll。