2008-11-05 35 views
4

當我的應用程序突然崩潰時,有沒有辦法讓我可以得到完整的崩潰轉儲?生成非託管代碼崩潰的轉儲?

問題是,我懷疑這是由於非託管代碼殺死了.net框架本身,因此,除非在崩潰時有一個調試器連接到應用程序,否則應用程序甚至不會有機會處理這次事故。

我不能附加一個調試器和等待,因爲崩潰發生隨機和我們有很多安裝的位置,所以我不知道是否有可能做到這一點不附加一個調試器。

編輯:我知道微軟調試SDK的,我也只是發現了約DebugDiag資料。我希望這樣做,而不必每次都附加到應用程序,因爲它通常在銷售過程中,我沒有時間附加調試器並瀏覽堆棧跟蹤。 DebugDiag似乎讓我爲此設置了一條規則,但它似乎只適用於已經運行的進程,而不是等待某個進程啓動。

回答

0

debugdiag完全是scriptable。當我遇到這樣的問題時,我們會讓它掃描某些進程名稱並自動附加。

0

最好的方法是編輯註冊表,以便在發生崩潰時調用相應的應用程序來生成轉儲。所以在你的情況下,我會讓Dr. Watson生成崩潰轉儲。

link

基本上編輯註冊表項HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

設定值

Value Name = Auto 
Type = String (REG_SZ) 
Data Value = 1 or 0. (Default is 1) 
Value Name = Debugger 
Type = String (REG_SZ) 
Data Value = drwtsn32 -p %ld -e %ld -g 

這將在點你的應用程序崩潰援引沃森博士。有關更多詳細信息,請參閱本文中的鏈接,請注意,如果您未在將來調用Dr. Watson,則需要將「自動」值設置爲0。