zoukankan      html  css  js  c++  java
  • c#


    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不了?

  • 相关阅读:
    @hdu
    @51nod
    @51nod
    @51nod
    JS-正则表达式常规运用
    CSS-复选框默认样式修改
    Vue-路由传参query与params
    Vue-阻止页面回退
    Vue-表单提交
    JS-原生的ajax
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3362297.html
Copyright © 2011-2022 走看看