核心方法throwable中的private void printStackTrace(PrintStreamOrWriter s)
先打印出message信息:
s.println(this); 这个打印的是toString()信息
toString信息直接提取的detailMessage打印出来
StackTraceElement[] trace = getOurStackTrace(); 获得堆栈信息
int depth = getStackTraceDepth(); 堆栈深度
照着这个深度建一个数组
stackTrace = new StackTraceElement[depth];
for (int i=0; i < depth; i++)
stackTrace[i] = getStackTraceElement(i);
把堆栈信息循环加入数组中。
以上的getStackTraceElement(i)调用的是本地方法native StackTraceElement getStackTraceElement(int index);
再循环打印出堆栈信息
for (StackTraceElement traceElement : trace)
s.println("\tat " + traceElement);
前面一一个换行\t +a+空格+ 信息,如下,堆栈信息是本地方法open
at java.io.FileInputStream.open(Native Method)
构造器初始化方法
at java.io.FileInputStream.<init>(FileInputStream.java:146)
构造器初始化方法
at java.io.FileInputStream.<init>(FileInputStream.java:101)
main方法
at org.yinxueframework.test.test.system.EprintStack.main(EprintStack.java:16)
方法依次是从最深的方法开始打印,最后是最外层的方法调用。
ava.io.FileNotFoundException: 11 (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at org.yinxueframework.test.test.system.EprintStack.main(EprintStack.java:16)