簡體   English   中英

Visual Studio 2019 中斷已處理的異常 (C#)

[英]Visual Studio 2019 breaks on already handled exception (C#)

我在 try-catch 塊中有一些代碼,可能會引發異常。

異常在 catch 塊中處理。

該代碼在 VS 2017 下工作。但是,切換到 VS2019,調試器將無法繼續(見截圖)

我如何告訴調試器不要在已經處理的異常處中斷?

在此處輸入圖像描述

[編輯]

在這種特殊情況下,可以通過更仔細的代碼輕松避免異常,或者通過取消選中“拋出此異常類型時中斷”來禁用異常。

然而,這不是我的問題。

我的問題是:

為什么 VS 2019 在處理異常時會中斷?

我怎么能告訴它不這樣做?

[編輯:這個問題不是關於正確處理,而是關於破壞行為。 包含的示例當然是不推薦處理]

根據 Mattias Larsson 的回答,默認情況下,許多異常總是會中斷執行,無論它們是否被處理。 System.NullReferenceException就是其中之一。 為防止這種情況,您可以break when this exception type is thrown 這樣做會導致以下行為:

破壞行為

正如您之前評論的那樣,當不處理時,您希望調試器繼續在System.NullReferenceException上中斷; 這是標准行為,因為這樣的異常很關鍵,即不可恢復(也許有更好的術語?)。

有許多例外情況(默認情況下)會中斷執行,即使您有“全部捕獲”。 System.NullReferenceException就是其中之一。

但是,正如您在屏幕截圖的彈出窗口中看到的那樣,您可以選擇“關閉”此特定異常。 當前已檢查:“拋出此異常類型時中斷”。

取消選中此框,然后重試!

(您可以在此菜單選項中進一步調整異常設置:Debug / Windows / Exception Settings。)

關於為什么這是“不好的做法”,已經有很多說法了。

話雖這么說,有debuggerStepThrough

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debuggerstepthroughattribute?view=netcore-3.1

確保閱讀文檔以了解其含義 - 例如。 您需要啟用 JMC。

此外,在進行這些骯臟的異常檢查時 - 請盡可能具體地進行檢查,以避免意外;

try
{
   var x = MyFunc();

   // We do a check here that will throw an exception 
   var y = ThisFuncWillThrowNullRef(x);
}
catch(exception)
{
    // ALL exceptions are swallowed
    // What if MyFunc() throws an exception instead of the second function? what do we do then?
}


編輯; 在我工作的應用程序中,即使我們像您現在所做的那樣“吞下”異常,我們也會明確而詳細地記錄異常。 總是。 異常比不知道發生了什么更容易修復,並且隨着您的應用程序變得越來越大,引擎蓋下會發生越來越多的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM