我在Global.asax的Application_Error方法中有一个全局错误陷阱,该陷阱将任何未处理的异常写入日志文件。
无论如何,有没有将变量名及其值作为异常报告的一部分进行报告?
最佳答案
除非您对面向方面的编程做一些真正棘手的事情,否则您非常需要确保在引发异常时手动将任何相关信息引入堆栈跟踪。例如:
public void DoSomething(int number, string name)
{
try
{
...
}
catch (Exception e)
{
throw new Exception("Error occurred while doing something: " +
new {number, name}, e);
}
}
这样,当此异常向上传播到顶层时,数字和名称将包含在堆栈跟踪中。
编辑
阅读了大卫·斯特拉顿(David Stratton)的回答后,我觉得有必要对此进行一些扩展。我感觉到,即使是一些非常有经验的C#程序员都没有学到我学到的一些技巧。
首先,我想指出的是,.NET中的异常处理系统是专门为这个目的而设计的
InnerException
(在堆栈跟踪的各个位置提供附加信息)而设计的,它一点也不难去做。但是,您绝对应该将异常作为innerException
构造函数参数提供,而不是将e.ToString()
附加到新异常的消息中。其次,根据我在StackOverflow上阅读的各种评论和答案以及我自己的经验,最好做到以下几点:
throw;
保留原始异常的堆栈跟踪,也可以将原始异常包括为新异常的InnerException
。 最后,我想提一下,匿名类型声明语法非常适合这种情况,因为它非常简洁,并且会自动生成一个使用给定变量名和值的字符串。例如,
new {number, name}.ToString()
可能会产生“{number = 1,name = Test}”。
关于asp.net - 有没有一种方法可以在全局ASP.Net异常中显示变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796761/