所以有一天我的C#應用程序崩潰了。通常,在.NET應用程序中,如果你有一個未處理的異常,你會得到一個帶有堆棧跟蹤的很好的錯誤消息。但是,這一次,我得到了一個不同的對話框,它告訴我有一個錯誤,並提供了一個附加的調試器,但是對話框中沒有堆棧跟蹤,它運行的機器上沒有安裝調試器。默認的.NET異常處理程序
什麼給?爲什麼我看不到默認的.NET異常處理程序?
所以有一天我的C#應用程序崩潰了。通常,在.NET應用程序中,如果你有一個未處理的異常,你會得到一個帶有堆棧跟蹤的很好的錯誤消息。但是,這一次,我得到了一個不同的對話框,它告訴我有一個錯誤,並提供了一個附加的調試器,但是對話框中沒有堆棧跟蹤,它運行的機器上沒有安裝調試器。默認的.NET異常處理程序
什麼給?爲什麼我看不到默認的.NET異常處理程序?
很多,很多事情可能會導致這種情況發生:
OnPaint
);OutOfMemoryException
,StackOverflowException
,BadImageFormatException
等 - 這可能會阻止全局異常處理程序運行;真的唯一的方法是確定將重現錯誤的步驟,並使用像WinDbg這樣的工具來實際調試崩潰的部分。
您可能會崩潰在由您的應用程序直接或間接使用的非託管代碼中。
如果您訪問非託管代碼中的受保護內存,就是這樣。你不會管理異常和冒泡/傳播任何東西。你的過程會以舊式的方式崩潰,你需要老式的工具和技術來找出錯誤。
我以爲非託管異常通過CLR冒泡了嗎? – ajs410 2010-04-15 21:56:04
+1是非常豐富的。 – 2010-04-15 22:02:57
您列出的內容可能適用以下內容。 1)我有一個後臺工作人員調用非託管DLL。我強制在非託管DLL中發生異常。輸出窗口確認了非託管的一次機會異常,以及後續的管理一次機會SEHException,它包裝它。所以這個例外起來了,但是然後吞下了它。誰?爲什麼? 2)之前我看過EngineExecutionException,所以我有點熟悉CLR無法捕捉的致命異常。也可能是這個。 – ajs410 2010-04-15 22:27:26
@ ajs410:僅僅因爲您在調試程序中運行時看到第一次機會異常並不意味着它們「冒泡」,所以可以這麼說 - 如果您訂閱AppDomain.UnhandledException,可能會通知您的應用程序* '但它總是會終止運行時間,無論常常看起來像是「崩潰」。 – Aaronaught 2010-04-15 22:50:16