在我的C#應用程序中,當我在Visual Studio中以調試模式運行它時,它中斷說我有一個未處理的異常(它是一個System.ArgumentException)。但是當我在發佈模式下運行它時,應用程序不會崩潰。C#應用程序中未處理的異常是否會導致應用程序崩潰?
我的問題是如果我有未處理的異常後果是什麼?當用戶進入場景時,應用程序是否會崩潰?
在我的C#應用程序中,當我在Visual Studio中以調試模式運行它時,它中斷說我有一個未處理的異常(它是一個System.ArgumentException)。但是當我在發佈模式下運行它時,應用程序不會崩潰。C#應用程序中未處理的異常是否會導致應用程序崩潰?
我的問題是如果我有未處理的異常後果是什麼?當用戶進入場景時,應用程序是否會崩潰?
C#應用程序中的未處理異常是否會使應用程序崩潰?
如果您的意思是'未處理',在某種意義上'未處理',那麼它不一定。可以說,你的方法從靜態無效Main(在主線程中)開始,它會拋出未處理的異常。這會導致應用程序崩潰。但另一方面,如果你在一個新的任務(方法)中異步運行相同的方法,它將會導致執行此任務的線程yes,但不是你的應用程序(這個異常將由任務管理器自動處理)。
P.S. 因此未處理的任何異常終止程序流程。
['ThrowUnobservedTaskExceptions'](https://msdn.microsoft.com/en-us/library/jj160346.aspx)? – Sinatr
如果一個異常沒有崩潰/終止進程,那麼它已被處理。也許不是通過你的代碼,而是通過框架中的異常處理程序。這也適用於您可以配置是否應該處理「未查看任務例外」的任務。 –
如果異常真的未處理(它會遍歷所有圖層),而不會導致應用程序崩潰。然而,正如其他人之前已經提到的,當異常只是拋出一些代碼行,並捕獲任何其他體面的VS可能會顯示錯誤,然後將繼續在您的捕獲處理程序中調試。
考慮以下代碼:
void Main(string[] args)
{
try {
DoSomething();
} catch {
/* error-handling happens here */
}
}
void DoSomething {
// this exception will bubble until Main and is handled there --> no crash
throw new ArgumentException();
}
但是,如果你沒有你的Main
- 方法中的任何try-catch
嵌段(或DoSomething
內)的應用也將通過泡沫,但因此它不處理會導致到應用程序崩潰。
關於*可能會顯示錯誤*,我更喜歡在附加調試程序的情況下運行應用程序時檢測自己,並且在這種情況下不處理未處理的異常,這樣可以確保它們崩潰並且更易於調試。 – Sinatr
當然它崩潰 –
你是什麼意思的崩潰?它是一個控制檯應用程序?如果是,請嘗試在ide外運行。 – shahkalpesh
你爲什麼不嘗試呢?我需要10分鐘才能寫出概念驗證。 – Aron