浅析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);