簡體   English   中英

為什么拋出的異常與catch塊C#沒有正確匹配

[英]Why thrown exception is not correctly matched with catch block C#

面對SocketException的一些奇怪問題。 隨附的屏幕截圖更多地講述了它。

在此輸入圖像描述

  1. 為什么第一個catch塊沒有捕獲異常,而它意味着捕獲SocketException而拋出的異常又是一個SocketException。

  2. 為什么控制會進入第二個捕獲塊,這意味着捕獲任何異常?

[編輯]:在調試模式下添加屏幕截圖

在此輸入圖像描述

執行沒有進入第二個catch塊, try-catch顯然不會那樣工作,異常被拋出調用堆棧,任何后續catch子句都被忽略。

它只是看起來那樣,因為你在發布模式下調試這不是一個好主意,因為IDE可能缺少重要的調試信息,因此在輸入第二個catch子句時錯誤地顯示執行停止。

請注意,在那一點停止真的沒有意義,如果執行以某種方式使它成為第二個catch子句,它將在throw語句中停止,而不是之前。

為了縮短它,真正發生的是第一次throw執行停止並且IDE沒有正確顯示它。

故事的道德啟示; 不要在發布模式下調試。 如果您正在運行VS2015,它實際上會警告您, 發布模式下的調試體驗將會低於標准(不確定此警告是否出現在先前版本中)。

更新 :似乎問題與發布模式下的調試無關,因為它仍然在調試模式下發生。 不過,關鍵是調試不應該在發布模式下進行,因為這樣的時髦事情可能會發生。 我會嘗試清理解決方案,看看是否能解決問題。 如果它沒有,我不會出汗,代碼表現正常,它只是IDE無法正確顯示執行停止的地方,沒什么大不了的。

暫無
暫無

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

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