获取堆栈跟踪中的参数值

时间:2013-05-24 20:39:24

标签: c# asp.net .net asp.net-mvc error-handling

我无法再现我们在错误日志中看到的一些错误。

如果我知道特定方法在引发异常时使用了哪个记录ID,那么可以更轻松。

我们的所有未处理的异常都由我们的全局异常处理程序处理,它将异常的所有细节以及HTTP请求的所有细节放入日志表中。

有没有办法捕获引发异常的方法的所有参数的值?或者甚至更好,堆栈跟踪中的所有值?

3 个答案:

答案 0 :(得分:12)

不幸的是,这是不可能的:当你在处理程序中捕获异常时,带有方法参数的所有堆栈帧都消失了。控件离开您的函数后,您将无法再访问其参数值。

由于您知道崩溃发生的具体功能,您可以在那里设置一个异常处理程序来收集所有感兴趣的参数,然后重新抛出一个包装的异常。诊断完成后,您可以将代码恢复为正常状态:

void SuspiciousFunction(string name, long count) {
    try {
        // The code of your function goes here
    } catch (Exception e) {
        var args = new Dictionary<string,object> {
            { "name" , name  }
        ,   { "count", count }
        };
        throw new MySpecialException(e, args);
    }
}

答案 1 :(得分:3)

我会在抛出的方法中捕获异常,收集参数和任何其他所需信息,然后使用新的ApplicationException或包含其他信息的其他自定义异常重新抛出错误。

答案 2 :(得分:-1)

从文档Environment.StackTrace我会说这是可能的。 他们说

  

每个方法调用的堆栈跟踪信息格式如下:

     

“在FullClassName。FileName中的MethodName(MethodParams):line LineNumber”