簡體   English   中英

使用反射捕獲錯誤詳細信息

[英]Using reflection to capture error details

我有一個簡短的問題,希望有人曾經做過。 在我當前正在使用的系統中,我們推出了自己的自定義提供程序來處理Web異常。 我喜歡此提供程序的一件事是,它允許我們添加引發異常的方法的參數值。 該代碼看起來像這樣。

Public Sub Dosomething(ByVal Parameter1 As String, ByVal Parameter2 As String)
    Try
        'Do some process that causes and error.
    Catch ex As Exception
        Dim ErrorDetails = New List(Of String)

        ErrorDetails.Add("Parameter Values:")
        ErrorDetails.Add(String.Format("Parameter 1: {0}", Parameter1))
        ErrorDetails.Add(String.Format("Parameter 2: {0}", Parameter2))

        RaiseNewCustomException(ex, ErrorDetails)
    End Try
End Sub

在這種方法的情況下,參數及其值的捕獲非常手動,並且隨着越來越多的人觸摸代碼庫而忘記更新引發的錯誤,容易出錯。 有沒有辦法以更自動化/更不易出錯的方式解決此問題?

我玩過反射,但是我認為您無法通過反射來確定參數值。 我想要類似的東西:

Public Sub Dosomething(ByVal Parameter1 As String, ByVal Parameter2 As String)
    Try
        'Do some process that causes and error.
    Catch ex As Exception
        RaiseNewCustomExceptionAndAutomaticallyGenerateParameterErrorString(ex, System.Reflection.MethodInfo.GetCurrentMethod())
    End Try
End Sub

無法使用反射來檢索方法參數值。 只有調試器才能勝任,但是優化代碼后,即使調試器也無能為力。 JIT編譯器對參數傳遞進行了優化。 抑制這種優化花費不了可觀的成本,應用也無法自行調試。

只要您要保留這種異常報告樣式,就必須將參數值顯式傳遞給某種格式程序。 一個輔助函數,它采用一個Params數組並返回一個異常對象,您可以想到它。

反射不會給您參數值。 這在堆棧溢出問題中進行了討論。 使用反射來獲取方法名稱和參數,從.NET的堆棧框架中獲取參數值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM