• 异常——获取异常信息


    当出现异常时大家都经常会想查看异常的详细信息,什么异常,异常出现在什么位置等等。

    在日常的编程中,printStackTrace是一个经常被用的方法,这个方法把异常的详细信息输出到了控制台上。

    但是有一些时候我们想要把这些详细的信息以其他的方式展现,网页上、日志里、报警邮件中。

    Exception本身的toString,getMessage方法只是对该Exception类的本身信息,并不能帮我们找出异常点。

    那么就从printStackTrace着手,将这个方法要输出的信息放到一个String里不就好了吗?

    好了先看一下printStackTrace源码

     1     public void printStackTrace() {
     2         printStackTrace(System.err);
     3     }
     4 
     5     public void printStackTrace(PrintStream s) {
     6         synchronized (s) {
     7             s.println(this);
     8             StackTraceElement[] trace = getOurStackTrace();
     9             for (int i=0; i < trace.length; i++)
    10                 s.println("	at " + trace[i]);
    11 
    12             Throwable ourCause = getCause();
    13             if (ourCause != null)
    14                 ourCause.printStackTraceAsCause(s, trace);
    15         }
    16     }

    结合我们看到的一般异常的输出

    1 java.lang.NumberFormatException: For input string: "ss"
    2     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    3     at java.lang.Integer.parseInt(Integer.java:447)
    4     at java.lang.Integer.parseInt(Integer.java:497)
    5     at Main.main(Main.java:5)

    我们可以先把异常本身输出即e.toString();然后再把StackTraceElement[]输出。

    注意到e.getStackTrace() : StackTraceElement[] - Throwable

    好了我们需要的都有了输出吧(本文重点):

    1 public static String getStackTrace(Exception e) {
    2     StringBuffer message = new StringBuffer();
    3     StackTraceElement [] exceptionStack=e.getStackTrace();
    4     message.append(e.toString());
    5     for(StackTraceElement ste : exceptionStack) {
    6         message.append("
    	at " + ste);
    7     }
    8 }

    TO BE CONTINUED……

  • 相关阅读:
    1030 完美数列 (25 分)
    1029 旧键盘 (20 分)
    数据库命令失败原因汇总
    代码有中文括号,导致错误
    win10笔记本触控板使用指南
    (已解决)vsC#控制台应用添加System.Windows.Forms引用失败(精通C#)
    ildasm中Ctrl+M闪退的问题(已解决, 精通C# 15.1)
    C#控制台应用(.NET Core)添加System.Windows.Forms失败(已解决)
    知识点_指针_增加对指针的理解
    自己写出的Bug_应是%f却写成%d
  • 原文地址:https://www.cnblogs.com/erbin/p/4057114.html
Copyright © 2020-2023  润新知