StackTrace: 保存方法的栈调用信息。
什么意思呢?A方法里调用了B方法,B方法里调用了C方法,你调用A方法的时候StackTrace里就大概是这样:
at Project.Class.C in c:aaaProjectclass.cs:line 10.
at Project.Class.B in c:aaaProjectclass.cs:line 20.
at Project.Class.A in c:aaaProjectclass.cs:line 30.
它就是个字符串。
不过他有什么用呢?你说呢,毕竟人家连行号都告诉你了。如果丢了StackTrace,我们也就丢了这些信息。
什么情况下会丢StackTrace?看看这段代码:
static void Main(string[] args) { try { // Call Method1 Console.WriteLine(Method1()); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } Console.ReadLine(); } public static int Method1() { try { return Method1_1(); } catch (Exception ex) { throw ex; } } public static int Method1_1() { int j = 0; return 10 / j; }
乍看貌似没有什么问题,但是Method1多做了一件事: Catch(Exception ex){thorw ex;}
他带来一个后果就是,StackStace会丢.
得到的StackTrace如下:
at ExceptionMethodCall.Program.Method1() in c:ProjectsExceptionMethodCallExceptionMethodCallProgram.cs:line 33
at ExceptionMethodCall.Program.Main(String[] args) in c:ProjectsExceptionMethodCallExceptionMethodCallProgram.cs:line 16
删除 try..catch, 我们得到的StackTrace如下:
at ExceptionMethodCall.Program.Method1_1() in c:ProjectsExceptionMethodCallExceptionMethodCallProgram.cs:line 40
at ExceptionMethodCall.Program.Method1() in c:ProjectsExceptionMethodCallExceptionMethodCallProgram.cs:line 29
at ExceptionMethodCall.Program.Main(String[] args) in c:ProjectsExceptionMethodCallExceptionMethodCallProgram.cs:line 16
结果显而易见。
结论:以后还乱加try..catch不了?