2011-07-21 32 views
0

我們有一個不尋常的情況,在另一個try-catch塊內的try-catch塊。兩個catch子句都捕獲異常類型的異常。在最內層的try-catch塊中發生的錯誤,會被第一個空的catch捕獲,而不是移動到下一行,它會被另一個catch捕獲。這是我以前從未見過的。我們的一位同事聲稱這是一些設置,但他不記得是什麼樣的設置。你知道爲什麼會發生這種情況,以及如何「關掉它」? 請找到下面的代碼:由於某種原因被捕獲的異常冒泡到另一個catch塊

try { 
     //some code         
     try 
     { 
       //code that throws exception       

     } 
     catch (Exception) 
     { 
     } 
     //some other code, never reached 

     } 
    catch (Exception ex) 
    { 
      Logger.Write(ex.ToString()); 
      return null; 
    } 
+6

顯示一些真實的代碼。 – Henrik

+0

什麼是第一個catch塊的「處理」部分?它涉及重新拋出exceptoin嗎? –

+0

在第一個(即_inner_)catch塊中肯定存在一個異常。你能提供更多相關的代碼嗎? –

回答

2

一兩件事,可能會導致這之後編寫「其他代碼」是你的第一個catch塊也拋出異常。這會導致第二個被觸發。

您的同事可能指的是Visual Studio的異常捕獲功能,它允許您打破任何異常(包括已經處理的異常)。您可以通過按CTRL + ALT + E找到這個,或者在菜單中它的調試中列出 - >擴展...

如果沒有這些都是的話,那麼我們就需要更多的代碼

+0

第一個catch塊是完全空的。對於誤解抱歉 - 我已更正文章 – agnieszka

+0

「調試 - >擴展」設置似乎是最有可能的罪魁禍首。 –

+0

調試 - >異常?那裏有什麼? – agnieszka

-1

你可以嘗試使用finally塊來代替try-catch塊

+2

這不解釋行爲在任何方式,我試圖瞭解爲什麼這是發生在 – agnieszka

0

嘗試清潔//處理什麼都不做,看看它是否仍然要是讓//處理部分要麼引起異常或發生拋出異常

0

我有兩個followups:

  1. 這是否只發生在你的vs還是在其他人身上?

    • 如果發生這種情況只在你的 - 它可能是按Ctrl + Alt + E,建立調試並打破
  2. 是否運行異常塊?也許你的異常處理塊配置不正確?