2014-02-12 61 views
1

我用C#(.NET 4.0)編寫了一個程序,並將它與C#Express的發佈助手一起分發。使用windbg評估小型轉儲器

它適用於我的大多數用戶,但只有一個。安裝時,他得到一個錯誤,我的應用程序已停止工作。所以他給我發了這個錯誤的mdmp文件,所以我可以評估它來得到錯誤。

問題是,我不知道該怎麼做。我看了一些WINDBG的教程,並試圖使用它們,但他們沒有幫助。我也試過this topic。但我無法訪問句柄。

有沒有什麼辦法可以評估這個文件,以便我可以找出那個錯誤?

+0

你可能需要做一個完全轉儲,所以它抓住把手錶的狀態,所以你可以做一個驗屍使用WinDBG等分析。這裏描述的區別:http://stackoverflow.com/questions/6903329/minidump-vs-fulldump –

+0

那麼我如何強制我的應用程序或Windows做一個完整的轉儲,而不是一個小型轉儲? –

+0

你是如何得出結論的,你首先需要把手錶?現在在小型轉儲中已經有很多信息了。你得到的錯誤是什麼?什麼分析-v告訴你?爲了獲得完整的轉儲,作業imo的最簡單工具是來自sysinternals的procdump。 –

回答

1

你可能需要做一個全面的(用戶模式)傾倒,所以它抓住把手錶的狀態,這樣你就可以做使用WinDBG中,驗屍分析等

這裏的差異說明:

  • stackoverflow.com/questions/6903329/minidump-vs-fulldump

如果你有安裝的WinDBG並出現死機,你可以使用WinDbg命令來創建一個包含更多信息轉儲文件例如使用'h '選項在小型轉儲中包含「處理」信息。

或者您可以使用稍微更友好的DebugDiagnostics 1.2工具....您可以創建一個完整的用戶轉儲。


如果你想看到的.NET堆棧幀,看在轉儲捕獲其他.NET運行庫的狀態,那麼你需要加載SOS.DLL( Son of Son)來訪問轉儲中的信息....它是一個WinDBG擴展,當安裝在計算機上時,該擴展與.NET框架一起分發。

正如所指出的那樣,您需要加載最初調試過的機器上的mscordacwks.dll(NET2)/cor.dll(NET4)和sos.dll的相同版本......這可能會很痛苦。

有一個解決方案...如果你設置的WinDBG指向Microsoft符號服務器,即:

然後在理論上,mscordacwks.dll/cor.dll相匹配的目標計算機上使用的NET版本,會從符號服務器下載的,如果它不存在於你的機器。

或者,您可以通過使用PSSCOR來避免所有這些shenanans ...它沒有與特定mscordacwks/cor.dll版本的緊密綁定。

裝入PSSCOR2(NET 2)或PSSCOR4(NET 4)擴展...取決於.NET框架版本的應用程序下運行..... PSSCOR是的超集SOS。在你的情況下,你想加載PSSCOR4(忘記常規SOS)。

+0

我是否從迷你轉儲中創建完整轉儲?就像在發生崩潰的機器上的WinDBG中打開小型轉儲器一樣,或者我該怎麼做? –

+0

不,您不能從現有的「小型轉儲」文件創建「完整轉儲」......您必須在正在崩潰的進程上創建完整轉儲....因此在他的機器上。使用上述工具創建完整轉儲......然後用他提供的.dmp文件創建完整轉儲,然後在WinDBG中「打開」它並在您的機器上進行分析。 –

+0

請參閱:http://stackoverflow.com/questions/734272/how-to-use-windbg-to-analyze-the-crash-dump-for-vc-application/25223024#25223024 ...獲取有用的WinDBG資源 –

0

您可以從Windows Error Reporting (WER) configured to create local dumps受益。正如其他人已經陳述的那樣,您需要爲.NET完全轉儲。

請注意,這可能是幾百MB,而不是1 MB的.MDMP文件。你需要解釋它是如何發送給你的。

如果你有轉儲,你不一定需要WinDbg。您也可以在Visual Studio中打開轉儲(雖然不確定是否爲Express版本)。如果你可以在Visual Studio中打開它,那可能對你更方便。

請注意,對於WinDbg,您還需要目標計算機的文件mscordacwks.dllSOS.dll,除非它與您的版本完全相同。由於SXS功能,它們可能在不同的地方。也許最好把它們全部弄好。只爲你我已經初步發佈了Mscordacwks collector

作爲起點的WinDbg,下面的命令應該有所幫助:

*** configure symbols to be downloaded from Microsoft 
.symfix c:\symbols 
*** Reload anything which has been loaded so far 
.reload 
*** Load the .NET extension, because WinDbg itself is native only 
.loadby sos clr 
*** Or, if the version is different to your system 
.load c:\filesfromcustomer\sos.dll 
*** Print exception information 
!pe 
*** Get the callstack 
!clrstack 
+0

非常感謝你的努力。我會盡力嘗試這個! –

+0

您已鏈接到MSDN頁面以收集用戶模式轉儲。但是,第一段澄清說這不適用於.NET應用程序。我不認爲這會幫助我獲得全面的轉儲。 –

+0

@MarcoFrost:這句話裏有一個if語句:'做自己的定製崩潰報告的應用程序'。我認爲你的應用程序不會執行自己的崩潰報告。如果你這樣做,你應該簡單地將正確的參數傳遞給'MiniDumpWriteDump()'方法。 –