Mat*_*eld 5 .net c# exception stack-trace
考虑这个小程序.忽略,如果你愿意,通用捕获,我保持简短的尝试并说明要点:
private static void Main(string[] args)
{
Try(Fail);
}
private static void Fail()
{
var x = ((string)null).Clone();
}
private static void Try(Action action)
{
try
{
action();
}
catch (Exception exc)
{
Debug.WriteLine(exc.StackTrace);
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,会生成以下内容(删除一些路径信息):
at Scratch.Program.Fail() in Program.cs:line 27
at Scratch.Program.Try(Action action) in Program.cs:line 34
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 为什么异常的堆栈跟踪会停止在方法中展开方法链Try()?我希望它能够超越Main()方法.
我一直无法找到任何关于停止异常展开的文件Try()- 所以我想了解这一点.
Exception.StacktraceGetStackTrace到底会调用哪个
new StackTrace(this /* exception object */, true)。当与这些参数一起使用时,将评估堆栈跟踪以查找异常点,直到当前方法。添加的时候可以自己检查一下
catch (Exception exc)
{
Debug.WriteLine(new StackTrace());
Debug.WriteLine(new StackTrace(exc, true));
}
Run Code Online (Sandbox Code Playgroud)
第二个版本是 返回的堆栈跟踪exc.StackTrace,第一个版本是从当前方法到入口点或线程启动的完整堆栈跟踪。