繁体   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