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

  • 相关阅读:
    源码0603-08-掌握-NSURLSession-上传
    源码0603-05-掌握-大文件下载
    源码0603-03-掌握-NSURLSession
    源码0603-01-了解-大文件下载(NSOutputStream)
    源码0602-10-掌握-文件上传11-了解-获得文件的MIMEType
    源码0602-08-掌握-解压缩
    源码0602-06-掌握-小文件下载-大文件下载
    用JS实现的控制页面前进、后退、停止、刷新以及加入收藏等功能
    java一路走来
    CKEditor3.5.3 JAVA下使用
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3362297.html
Copyright © 2020-2023  润新知