Dot-Net

Windbg 需要不同版本的 mscordacwks.dll

  • March 11, 2013

我在嘗試使用 windbg 調試小型轉儲文件時遇到了一個非常奇怪的問題。我已經在我自己的機器上嘗試過這個,也通過在目標機器上執行 windbg 來進行小型轉儲,但兩種情況下的結果都是一樣的。

在開始時,我載入所需的 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\Microsoft.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 使用本地版本。

我已經嘗試過這里這裡建議的方法,但沒有任何效果。任何幫助是極大的讚賞。

這是因為您在安裝了 .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 轉儲時顯式載入它。

您是如何嘗試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 想要那個版本的 .NET 4 的 SOS,你可以

  1. 從源電腦複製 sos.dll 並將其保存到 C:\temp\sos.dll。
  2. 在 WinDbg 中,不要呼叫 .loadby sos clr,而是使用 .load C:\temp\sos.dll。

引用自:https://stackoverflow.com/questions/15251082