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

  • 相关阅读:
    工单系统的设计与实现(4)
    java_tcp_简单示例
    java_udp编程
    mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
    行锁与表锁详解
    BTree和B+Tree详解
    深入浅出java常量池
    MySQL三大范式和反范式
    java多线程 栅栏CyclicBarrier
    SpringBoot初始教程之Servlet、Filter、Listener配置
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3362297.html
Copyright © 2011-2022 走看看