在堆栈跟踪中获取参数的值

本文关键字:参数 获取 堆栈 跟踪 | 更新日期: 2023-09-27 18:15:10

我在复制我们在错误日志中看到的一些错误时遇到了麻烦。

如果我知道一个特定的方法在抛出异常时使用的是哪个记录ID,那就容易多了。

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

是否有方法捕获抛出异常的方法的所有参数的值?或者更好的是,所有的值都在堆栈跟踪中?

在堆栈跟踪中获取参数的值

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

既然您知道发生崩溃的特定函数,那么您可以在那里设置一个异常处理程序来收集所有感兴趣的参数,并重新抛出一个包装异常。一旦诊断完成,您可以将代码恢复到正常状态:

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);
    }
}

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

来自文档环境。我想说这是可能的。他们说

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

在FullClassName

"。MethodName (MethodParams) in FileName:line LineNumber "