我想捕獲所有引發(處理或未處理)異常以記錄它們。對於未處理的我使用ThreadExceptionEventHandler和UnhandledExceptionEventHandler但我想捕獲和嘗試catch塊中有或沒有(例外e)的異常。可以繼承異常類來創建一般事件嗎?捕獲所有(已處理或未處理)異常
回答
從Exception繼承以提供您自己的Exception類對於您在代碼中生成的異常可以很好地工作,並且可以使用內部異常構造函數在鏈中攜帶內置異常。
如果您想要嘗試這樣做,您需要替換所有的異常處理代碼,並且可能還需要添加更多塊。我認爲它不會比Peter McGrattan的方法好很多,但它可能允許您在保留&檢查原始異常和重新投擲時使用不同的選項,例如記錄下它是否已經被記錄下來鏈。
只要是明確的,可以使用:
catch (Exception e)
{
log(e);
throw;
}
將重新拋出原始異常。
不,那不可能。
這是有可能的唯一方法是使用調試的API(the managed version is named mdbg)
聽起來像是你有未處理的異常所涵蓋的可能,處理的異常你就不能最終...
catch (Exception e) {}
並與實例調用相同的日誌記錄功能。
如果沒有,你真的必須有一些情況下,您有一個追趕,但沒有抓住,你可以用一個實例...
catch { throw; }
重新拋出該異常最終被捉住並記錄作爲一個未處理的例外。
從Windows XP開始,即使在知道處理或未處理之前,您也可以得到關於每個引發異常的通知。 這可以通過所謂的「向量化」異常處理來實現,這實際上是對標準結構化異常處理的一點補充。
致電AddVectoredExceptionHandler
添加您自己的處理程序。你會馬上叫異常引發之後,無論是通過明確throw
/__CxxThrowException
/RaiseException
或隱式處理器(訪問衝突或等)
您可以登錄異常處理函數中(如農產品堆轉儲),並返回EXCEPTION_CONTINUE_SEARCH
。
C++允許catch(...)
捕獲所有異常,但並不真正允許深入分析它們。 (請參閱using catch(...) (ellipsis) for post-mortem analysis) 我不確定它是否能用C#工作。
沒有辦法捕獲已捕獲的異常,但可能與AddVectoredExceptionHandler一起工作。
說了這麼多,你可以使用一個接球重新拋出的方法:
catch(Exception e) {
Logger.Log(e);
throw;
}
或
catch(Exception e) {
bool rethrow = LoggerStrategy.Log(e);
if(rethrow) { throw; }
}
更妙的是,使用記錄應用程序塊。
- 1. 捕獲所有未處理的異常
- 2. 未處理的異常未被處理程序捕獲
- 3. 捕獲未處理的線程異常
- 4. 如何「捕獲」未處理的異常
- 5. Android未捕獲的處理程序/未捕獲的異常
- 6. 處理異常時拋出的額外的未捕獲異常
- 7. 處理未處理的異常問題
- 8. DRf,處理未處理的異常
- 9. 如何處理未處理的異常?
- 10. 處理未處理的異常
- 11. AWS CloudWatch記錄已處理和未處理異常的指標
- 12. 錯誤捕獲/異常處理
- 13. happstack-lite處理程序捕獲異常
- 14. 捕獲SOAP錯誤並處理異常
- 15. 嘗試和捕獲異常處理
- 16. WPF - 處理未處理的異常時要捕獲哪些信息?
- 17. 如何處理未捕獲的異常,然後將處理委託給系統?
- 18. 承諾:未處理的異常未捕獲
- 19. PGAgent:捕獲未處理的未知異常;終止
- 20. Javascript是否觸發未處理/未捕獲異常的事件?
- 21. WPF未處理的異常
- 22. Django未處理異常
- 23. 未處理的異常
- 24. 格式異常未處理
- 25. 未處理的異常
- 26. 未處理的異常
- 27. 未處理的異常+ VS2010
- 28. 空異常未處理?
- 29. 未處理的異常
- 30. stackoverflow異常未處理
這是一個非常大的應用程序,我需要把log.write()放在所有try catch塊中,這就是我想要避免的。謝謝 – andySF 2010-05-06 10:49:43