欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅析java异常栈

程序员文章站 2023-12-04 11:28:52
我们给大家通过实例代码分析了java异常栈的函数用法并在下面给大家整理了java获取异常堆栈信息的两种方法,以下是全部内容: (stack trace)异常栈轨迹是指:...

我们给大家通过实例代码分析了java异常栈的函数用法并在下面给大家整理了java获取异常堆栈信息的两种方法,以下是全部内容:

(stack trace)异常栈轨迹是指:

当throw throwable 时,throwable对象抛出过程(穿梭)所经历的多个方法调用层(方法调用栈)。越接近 throw 语句的方法先进入异常栈。

(throwable causal chain)异常原因链:

在throwable类中的cause属性,表示被当前异常包装的原始异常。(可以称为异常原因)

在打印异常栈轨迹时,会递归打印 原始异常的异常栈。

现在来分析一下 throwable.printstacktrace() 方法。

在throwable.printstacktrace(printstreamorwriter s) 内部,我们可以看到:

在打印异常栈时,是先打印 当前异常对象this的异常栈。

然后再打印 异常原因链。(递归打印 原始异常的异常栈)

synchronized (s.lock()) {
   // print our stack trace
// 1. 先打印 当前异常对象this的 异常栈。
   s.println(this);
   stacktraceelement[] trace = getourstacktrace();
   for (stacktraceelement traceelement : trace)
    s.println("\tat " + traceelement);

   // print suppressed exceptions, if any
   for (throwable se : getsuppressed())
    se.printenclosedstacktrace(s, trace, suppressed_caption, "\t", dejavu);
   // print cause, if any
// 2. 打印 异常原因链
   throwable ourcause = getcause();
   if (ourcause != null)
    ourcause.printenclosedstacktrace(s, trace, cause_caption, "", dejavu);
  }

java获取异常堆栈信息

方法一:

public static string getstacktrace(throwable t) {
  stringwriter sw = new stringwriter();
  printwriter pw = new printwriter(sw);
  try {
    t.printstacktrace(pw);
    return sw.tostring();
  } finally {
    pw.close();
  }
}

方法二:

org.apache.commons.lang3.exception.exceptionutils.getstacktrace(e);