2010-02-05 25 views

回答

4

實際上,通過終止程序來處理意外的異常是處理這種情況的最好方法,因爲一般情況下,當意外事件發生時程序狀態是未定義的。如果您記錄所有異常,並且擁有一套體面的驗收測試,則可以消除由於程序流而導致意外異常的問題。

通過檢查方法輸入,類的單元測試和理解你的框架來進行防禦性編程,預計會有大部分例外。

1

對於您試圖完成的任務,沒有語言支持。我們爲VS編寫了一個海關插件,以確保我們API的所有入口點都嘗試捕獲日誌。然而,我從來沒有看到強制你覆蓋所有可能聲明的異常情況的語言的價值,因爲你仍然需要編寫一些代碼來執行一些有意義的錯誤。大多數人只是看着編譯器抱怨寫一個處理程序,並隱藏一些可能是一些有用的錯誤,在一些無用的代碼。在某些情況下,它最好失敗並知道存在問題。

+0

我同意這是一件壞事,只是捕捉異常,而不是用它適當地做出如何的程序應該做出反應決定這是不好的,就像在VB6中說'On Error Resume Next'。 – awe 2010-02-05 06:30:49

1

您應該爲您的應用程序添加最高級別的異常處理程序,併爲您的應用程序編寫單元,功能和集成測試,以測試所有可能的用例。這將幫助您消除幾乎所有未檢查的異常。

也儘量不要捕捉異常,但要消除原因。 (即抓不住ArgumentNullException但不經過null

2

的Windows應用程序:

AppDomain currentDomain = default(AppDomain); 
currentDomain = AppDomain.CurrentDomain; 
// Handler for unhandled exceptions. 
currentDomain.UnhandledException += UnhandledExceptionHandler; 
// Handler for exceptions in threads behind forms. 
Application.ThreadException += ThreadExceptionHandler; 

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
} 

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e) 
{ 
} 
+0

@Aseem:不知道我明白這一點。所以,如果我沒有處理它們,所有未處理和線程相關的異常都會出現在這裏。它提供了一些安全性。是您的意圖嗎? – 2010-02-05 09:33:17

+0

是的...然後您可以決定如何處理這些例外情況。 – 2010-02-05 11:47:24

相關問題