我編譯由於某種原因停止捕獲異常的控制檯應用程序趕上例外。作爲測試,我把以下內容:VB.NET的try/catch不運行時
Sub Main()
Try
Log = New LogWriter("C:\app.log")
Log.Log("Test:")
Dim a As Single = 5/0
Dim b As Object
Log.Log(b.ToString)
Catch exTest As Exception
Log.Log("Caught exception")
End Try
End Sub
(其中寫進程是我寫來控制日誌輸出的自定義類)所以,當我運行它在目標機器上編譯EXE(沒有Visual Studio中會發生什麼)?我得到的線「測試:」在日誌中,則:
未處理的異常:System.NullReferenceException:對象不設置到對象的實例。
爲什麼?我做了什麼來禁用異常處理?
莫非的'Log'對象是某種缺陷,使得'Log.Log'本身拋出NRE?第一次調用會拋出一個會被捕獲的異常,但是Catch處理程序本身內的調用會拋出另一個異常,並且這個異常不會被捕獲。 – supercat
這完全正常,b.ToString()方法因N爲無效而失敗,因爲NRE。如果你希望從零分中得到一個例外,那麼這是無望的希望,這是有效的,並有一個明確定義的Infinity結果。超越。 –
是的,我把這兩行故意生成一個異常,問題在於Catch沒有捕獲它。這讓我瘋狂,我無法弄清楚爲什麼Try/Catch在整個項目中不再工作。我創建了一個全新的項目,添加了所有代碼,並展現出相同的行爲;但如果我在同一個解決方案中使用全新的代碼創建一個全新的項目,它會捕獲異常並在Catch塊中處理。如果我刪除Try/Catch並使用On Error GoTo,則確實會捕獲異常。 –