0
如果我有一個現有的異常對象(我是而不是在一個catch塊中,我只是碰巧給了一個異常對象),有什麼方法(重新)拋出它,同時保留它的堆棧跟蹤?如何在VB中保留堆棧跟蹤的同時拋出現有異常?
詢問的上下文是我正在寫一個RunWorkerCompleted處理程序。如果在運行後臺任務時發生錯誤,那麼這將顯示在RunWorkerCompletedEventArgs的Error屬性中。爲了保持代碼簡單,我希望使用相同的錯誤處理代碼來捕獲此錯誤,或者在處理程序期間稍後發生任何錯誤。這意味着我需要這樣的代碼:
Private Sub OnDone(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
Try
If e.Error IsNot Nothing Then Throw e.Error ' But how do I keep its stack trace?
' do other work that might throw an exception
Catch ex As Exception
' handle any exceptions
End Try
End Sub
我不認爲這裏使用的InnerException(即說像拋出新的異常(前))會工作,因爲當時我有我的catch塊問題無法知道它應該處理的異常是外部還是內部異常。
StackOverflow似乎有各種類似的問題,但我還沒有找到任何描述這種特殊情況的東西。
爲什麼你需要重新拋出它?你能不能在if語句中爲這個特定的異常寫錯誤處理代碼,從而保存堆棧跟蹤? –
If語句中異常的錯誤處理代碼與將在Catch塊中執行的錯誤處理代碼完全相同,因此雖然我可以在兩個地方重複代碼,但這些代碼都不是很理想 - 會使代碼更難讀取。 – PhantomDrummer
在兩個位置調用的單獨函數中有錯誤處理代碼的情況如何?或者,有一個錯誤變量和一個foundError變量,並將它們設置爲if和catch語句,然後在try-catch塊之後處理錯誤。 –