如果未捕獲到異常,C#程序中會發生什麼情況。程序是否會像運行時錯誤一樣「崩潰」?C#:如果未捕獲到異常,會發生什麼
回答
是的。
試試看!根據錯誤,通常會被捕獲。現在,至於是否應該捕獲所有異常,如果其類似於a[i]
,如果i
太大,但您知道i
應該保持在範圍內(例如,在for循環中),那麼它可能會拋出錯誤,您不會理解這個例外。但是,如果您使用的是來自用戶的數據(比如來自GUI),那麼您幾乎總是會對其進行驗證。
是的。
發生了某些「異常」情況,並且您的程序不知道如何處理它,因此它必須停止執行並且「崩潰」。會有崩潰後執行的代碼,比如finally塊,但基本上派對已經結束了。
最好的辦法是記錄這些事件,並在崩潰時給出有關係統/程序狀態的儘可能多的信息。 Logging Application Block是記錄錯誤的更強大的自動方法之一。
親自試一試!
class Program
{
static void Main(string[] args)
{
int[] arr = new int[1];
arr[5] = 6; //throws an exception; what kind?
}
}
在調試模式下編譯並運行它,以便快速回答您的問題。
或者只是寫一些程序。遲早你的代碼會拋出異常;它發生在我們所有人身上,通常比我們可以計算的次數多。在控制檯或WinForms應用程序中,未處理的異常通常會使程序崩潰;在ASP.NET中,它會生成一個錯誤頁面,但它不會崩潰整個網站。您還可以編寫自定義代碼,指定在未處理的異常情況下要執行的操作,以便您的應用程序能夠優雅地失敗。
如果未捕獲到異常,那麼在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
+1爲克里斯的存檔博客的任何鏈接。老歌,但好東西,每一個! – 2011-03-23 18:30:38
- 1. 如果未捕獲到異常,會發生什麼情況?
- 2. 自動捕獲的異常會發生什麼?
- 3. 如果發生異常,Laravel DB Transaction會發生什麼?
- 4. DatastoreService批量刪除。如果發生異常,會發生什麼
- 5. 爲什麼Python不會捕獲在C++中引發的異常?
- 6. 爲什麼我會收到「未捕獲的異常」錯誤?
- 7. 爲什麼異常未被捕獲?
- 8. 如果finally塊引發異常,會發生什麼情況?
- 9. 如果CFile :: Write引發異常會發生什麼情況?
- 10. 如果我的IExceptionPublisher引發異常,會發生什麼情況?
- 11. 未捕獲到Visual C++/STL異常
- 12. 如果在Application_Start中引發未處理的異常,會發生什麼情況?
- 13. 如果沒有「捕獲」,返回值會發生什麼?
- 14. 爲什麼會有未捕獲的異常?
- 15. 爲什麼會發生這種異常?
- 16. 爲什麼會發生XmlPullParserException異常?
- 17. C++異常捕獲
- 18. C++捕獲異常
- 19. 如何捕捉「未捕獲的異常」?
- 20. 引發未捕獲的異常
- 21. 爲什麼未捕獲的異常會被記錄到Sentry兩次?
- 22. C++處理未捕獲的異常
- 23. c#未處理的異常捕獲器
- 24. C# - 任務異常未被捕獲
- 25. C#超時異常未捕獲
- 26. 目標C:未捕獲的異常「NSUnknownKeyException」
- 27. Visual Studio C++異常未捕獲
- 28. 未捕獲異常'NSInvalidArgumentException' - >目標C
- 29. C++ - 爲什麼'什麼'在捕獲範圍內打印「未知異常」?
- 30. 爲什麼會發生這種異常? Lucene異常
肯定。有一個未處理的異常處理程序記錄這些是一個很好的做法。 – 2011-03-22 02:10:31
@Mitch:你在談論AppDomain.UnhandledException事件嗎? – 2011-03-22 02:14:28
將編程視爲樂高盒子。可以將它翻過來並嘗試構建一些東西,看看它是如何工作的。你甚至不必清理VS. – 2011-03-22 02:22:03