2014-10-20 30 views
0

我在我的應用程序中使用Elmah進行錯誤報告。如果catch語句代碼導致錯誤怎麼辦?

通常,如果出現錯誤,我會抓住它,製作一條自定義消息並將其返回。

catch (Exception ex) 
{ 
    var e = new Exception("Failed to get Intake Statuses <br />" 
+ " (@PageNumber = " + pageNumber + ", @PageSize = " + pageSize + ".<br />" 
+ " Error: " + ex); 

    ErrorLogger.LogErrorManually(e); 

    throw new Exception(e.Message); 
} 

現在,如果在創建的自定義錯誤中存在錯誤,則會出現此問題。

處理這個問題的最佳實踐是什麼?我是否創建另一個子Try/Catch?

+0

「LogErrorManually」容易拋出嗎?也許它應該嘗試/捕捉自己。否則,它看起來不需要擔心。如果你這樣做,另一個嘗試/抓住聽起來像是你最好的選擇。 – BradleyDotNET 2014-10-20 20:13:12

+0

調用它的方法是否有自己的try ... catch? – Mephy 2014-10-20 20:13:24

+10

拋出新的異常將導致您丟失堆棧跟蹤。而是隻考慮'throw;',或拋出一個包含原始異常的新異常作爲內部異常。 – 2014-10-20 20:14:23

回答

1

你可以做到以下幾點:

  1. 創建方法與說嘗試捕捉A和允許調用你的函數,其抓住你已經在說明書中給出的B.
  2. 在你的乙漁獲只使用這麼扔你的堆棧跟蹤不會消失。
  3. 在B catch的異常中,它會導航到catch A,因此您可以根據需要顯示該消息。
+0

如果通過一個代碼示例來解釋它會好很多。 – 2014-10-20 21:55:01

+1

我花了一點時間才明白,但這是有道理的。 一個代碼示例雖然對於任何人都會遇到這個問題是完美的。之後我會將其標記爲答案。 – ArjaaAine 2014-10-20 21:57:09