2011-04-14 62 views
2

下面,爲什麼Throw沒有保留我的原始行號?
如果我運行DerivedPage,我的日誌文件列出了第7行的錯誤。
不應該說第4行嗎?這是有道理的,如果我有Throw ex,但我不知道。
是不是Throw本身只是應該重新拋出並冒出錯誤?在asp.net中拋出問題

如果我在DerivedPage中完全刪除Try...Catch塊,那麼我的日誌文件正確列出3作爲錯誤行,但我無法記錄任何錯誤信息。

我該如何維護我的DerivedPage,還有我的日誌保持正確的行號?

Public Class DerivedPage Inherits BasePage 
Page_Load(o,e) 
    Try 
     Dim a = 3 -"a" 
    Catch ex As Exception 
     log.Info(...) 
     Throw 
    End Try 
End Class 

基頁:

Public Class BasePage 
Protected Overrides Sub OnError(e) 
    MyBase.OnError(e) 
    log.Error(Me.GetType(), Server.GetLastError) 
End Sub 
End Class 

編輯log.Error確實輸出的InnerException如果它存在。它在這種情況下。但是,InnerException的堆棧跟蹤不包含行號,只是異常詳細信息。

+0

您是否檢查過由GetLastError返回的異常? – tomasmcguinness 2011-04-14 15:15:06

回答

0

解決方案:每個Wrong line number on stack trace的兩個解決方案都拋出一個新的異常,並將當前異常作爲內部函數或使用輔助方法。
我打算拋出一個新的異常。

0

當重新拋出異常時,原始異常詳細信息將存儲在對象的InnerException屬性中。你應該有你所有的細節。

+0

如果存在,log4Net會打印出InnerException。它在這種情況下。但是,InnerException堆棧跟蹤不包含錯誤的行號。它只是給出了錯誤類型。 – eych 2011-04-14 15:26:03

+0

@eych:您是否嘗試過將日誌語句更新爲Log.Error(Me.GetType(),Server.GetLastError.InnerException)? – 2011-04-14 15:27:51

+0

只是試過...仍然沒有行號。 – eych 2011-04-14 15:30:52