让我们从Throwable.printStackTrace()的文档中获取堆栈跟踪:
HighLevelException: MidLevelException: LowLevelException
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
at Junk.c(Junk.java:23)
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
… 1 more
Caused by: LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
… 3 more
原因从最底部的嵌套原因(“根本原因”)显示到打印堆栈跟踪所属的原因。
在这种情况下,根本原因是LowLevelException,哪个原因MidLevelException,哪个原因HighLevelException。
要获得完整的堆栈跟踪,您必须查看封闭异常(及其封闭异常)的框架:
看一下省略了多少帧:“ … X更多”
在封闭的异常中查找省略的帧
看一下省略了多少帧:“ … Y更多”
将前X-Y帧追加到堆栈跟踪
如果Y> 0,则将其作为省略帧的数量重复步骤2
因此,如果我们想获得完整的堆栈跟踪,LowLevelException我们将执行以下操作: