2011-03-22 39 views
1

如果未捕獲到異常,C#程序中會發生什麼情況。程序是否會像運行時錯誤一樣「崩潰」?C#:如果未捕獲到異常,會發生什麼

+0

肯定。有一個未處理的異常處理程序記錄這些是一個很好的做法。 – 2011-03-22 02:10:31

+0

@Mitch:你在談論AppDomain.UnhandledException事件嗎? – 2011-03-22 02:14:28

+0

將編程視爲樂高盒子。可以將它翻過來並嘗試構建一些東西,看看它是如何工作的。你甚至不必清理VS. – 2011-03-22 02:22:03

回答

0

試試看!根據錯誤,通常會被捕獲。現在,至於是否應該捕獲所有異常,如果其類似於a[i],如果i太大,但您知道i應該保持在範圍內(例如,在for循環中),那麼它可能會拋出錯誤,您不會理解這個例外。但是,如果您使用的是來自用戶的數據(比如來自GUI),那麼您幾乎總是會對其進行驗證。

1

是的。

發生了某些「異常」情況,並且您的程序不知道如何處理它,因此它必須停止執行並且「崩潰」。會有崩潰後執行的代碼,比如finally塊,但基本上派對已經結束了。

最好的辦法是記錄這些事件,並在崩潰時給出有關係統/程序狀態的儘可能多的信息。 Logging Application Block是記錄錯誤的更強大的自動方法之一。

0

親自試一試!

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] arr = new int[1]; 
     arr[5] = 6; //throws an exception; what kind? 
    } 
} 

在調試模式下編譯並運行它,以便快速回答您的問題。

或者只是寫一些程序。遲早你的代碼會拋出異常;它發生在我們所有人身上,通常比我們可以計算的次數多。在控制檯或WinForms應用程序中,未處理的異常通常會使程序崩潰;在ASP.NET中,它會生成一個錯誤頁面,但它不會崩潰整個網站。您還可以編寫自定義代碼,指定在未處理的異常情況下要執行的操作,以便您的應用程序能夠優雅地失敗。

10

如果未捕獲到異常,那麼在C#程序中會發生什麼情況。程序是否會像運行時錯誤一樣「崩潰」?

也許吧。

也許不是。

發生什麼是實現定義

例如,您可能會看到一個對話框,提示「出現未處理的異常,並且我看到您已安裝Visual Studio,您是否想啓動調試器並檢查程序狀態?

您可能會看到一個對話框,提示「出現未處理的異常,是否要將此報告給Microsoft?」

如果您已經在調試器中運行,那麼調試器可能會引起您的注意。

允許運行時做任何事情,包括要求你做什麼。

注意,運行時是否存在將是一個catch塊知道或不以前的finally塊運行。您可以使用控制檯應用輕鬆演示此功能。寫一個崩潰的應用程序,並在finally塊中輸出:

Unhandled Exception: System.Exception: Exception of type 
'System.Exception' was thrown at 
ConsoleApplication1.Program.Main(String[] args) 
finally running now 

看看會發生什麼?運行時報告錯誤,給調試器一個運行的機會,或者向微軟報告問題,或者其他的,它在之前運行finally塊。如果他們跑了。他們可能不會。 任何事情都可能發生。用戶可以決定銷燬進程,或者啓動一個調試器並修復異常,或者其他什麼。

如果你真的想了解例外在C#中是如何工作的,你應該閱讀:

http://blogs.msdn.com/b/cbrumme/archive/2003/10/01/51524.aspx

+0

+1爲克里斯的存檔博客的任何鏈接。老歌,但好東西,每一個! – 2011-03-23 18:30:38

相關問題