我无法重现我们在错误日志中看到的一些错误。
如果我知道某个特定方法在引发异常时使用的是哪个记录 ID,那么它会变得容易得多。
我们所有未处理的异常都由我们的全局异常处理程序处理,它将异常的所有详细信息以及 HTTP 请求的所有详细信息放入日志表中。
有没有办法捕获引发异常的方法的所有参数的值?或者更好的是,堆栈跟踪中的所有值?
我无法重现我们在错误日志中看到的一些错误。
如果我知道某个特定方法在引发异常时使用的是哪个记录 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 或包含您的附加信息的其他自定义异常重新抛出错误。
从文档Environment.StackTrace我会说这是可能的。他们说
每个方法调用的堆栈跟踪信息格式如下:
“在 FullClassName。FileName 中的 MethodName (MethodParams) :line LineNumber”