在我们部署的C#应用程序上调试问题的几次令人尴尬的尝试后,我发现只需获取 someException.toString(),我就可以从异常中获得最详细的信息。
由于我将此值记录到数据库中,我对异常字符串的大小有点紧张。我当前的 errorDetail 字段设置为最多3000个字符。
这是一个很好的限制还是有可能获得更大的例外?
答案 0 :(得分:1)
答案是:不,没有真正的安全限制 - 如果时间过长,你必须手动减少长度。
Exception.ToString()有两种简单的方法可以实现很长的时间。
原因A - Exception.Message很长。
抛出异常的人可以在异常中放入一条非常长的消息。这真的很棒 - 这意味着他们会尝试捕捉导致异常的更多细节,以帮助解决问题。
原因B - 堆栈跟踪可能很长。
如果异常在功能上发生20级深度,则堆栈跟踪将具有20个细节级别。
这里有一些简单的代码来演示这个概念:
private string GetExceptionString(int iter)
{
try
{
return RecursiveFunction(iter);
}
catch (Exception ex)
{
return ex.ToString();
}
}
private string RecursiveFunction(int iter)
{
if (iter > 1)
return RecursiveFunction(iter - 1);
throw new Exception("Actual Exception Occurs Here");
}
基本上,如果调用GetExceptionString(1000),它将在1000级嵌套函数中引发异常。而且,当然,您将在堆栈跟踪中获得具有1000个细节级别的异常,并且长度大约为十万个字符。