获取堆栈跟踪中的参数值

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

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

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

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

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

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

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

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

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

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

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