2011-09-21 33 views
1

加載sosex後,出現以下錯誤。有任何想法嗎?掛起轉儲來自32位機器,我的是64位。我需要安裝一些東西嗎?在windbg中調試hang-dump的問題

!clrstack 

CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3623.dll, Win32 error 0n2 

回答

4

問題是您的計算機上的mscordacwks版本與崩潰轉儲版本不同。這不是一個簡單的問題 - 即使你的機器是64位的,你已經安裝了32位的.NET。我在C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727下。

您擁有的副本不會有那麼長的名稱,它只會被稱爲mscordacwks.dll。當調試器看到你的「活動」副本是不同的,它會搜索一個長名稱(避免DLL地獄),這也告訴你,你需要得到什麼版本。在我得到正確的mscordacwks.dll(例如,從原始機器)後,我將它複製到我的框架目錄中,並將其命名爲它在錯誤消息中顯示的名稱。我還設置windbg的圖像路徑以包含框架目錄。

sos必須使用mscordacwks框架程序集來理解內存數據結構。這一切都在博客文章「Failed to load data access DLL, 0x80004005」 – OR – What is mscordacwks.dll?上的黑暗角落博客的註釋中解釋。

你會發現互聯網上散佈着關於如何獲得該DLL的各種版本的問題。假設您無法從創建故障轉儲的計算機上獲取它,並且它不會從Microsoft符號服務器下載,我過去所做的是搜索microsoft.com for mscordacwks和我需要的版本(例如2.0.50727.3623)。它通常位於可以下載的安全補丁中。

如果你沒有合適的系統來安裝它,我已經運氣打開7zip的安裝exe。我在cab中找到了mscordacwks文件,該文件位於安全修補程序安裝可執行文件中的修補程序文件(MSP文件)中。每個人都可以用7zip打開。

當您打開CAB文件時,有時最好使用expand.exe,因爲它可以解壓縮文件7zip(v4.65)不會。如果您打開一個具有_manifest_.cix.xml的7zip的CAB,請使用expand來代替它,因爲它使用清單來提取,解壓縮和重命名內容。 7zip(做一個簡單的解壓縮到...)將其保留爲一串數字命名的文件,字面上爲1,2等。這些文件仍可能被壓縮。你知道的方式是,如果你打開它們(例如用SciTE),它們將以像PA30這樣的簽名開始(它將匹配來自清單的源「類型」屬性)。