堆栈轨迹(stack trace)是一个方法调用过程的列表,它包含了程序执行过程中方法调用的特定位置。
可以调用Throwable类的printStackTrace方法访问堆栈轨迹的文本描述信息。
Throwable t = new Throwable();
StringWriter out = new StringWriter();
t.printStackTrace(new PrintWriter(out));
String description = out.toString();
一种更灵活的方式是使用getStackTrace方法,会得到一个StackTraceElement对象的一个数组。StackTraceElement类含有能够获取文件名和当前执行的代码行号的方法,还含有能够获取类名和方法名的方法。toString方法将产生一个格式化的字符串,其中包含所获得的信息。
Throwable t = new Throwable();
StackTraceElement[] frames = t.getStackTraceElement();
for(StackTraceElement frame :frames)
*code...*
静态的Thread.getAllStackTraces方法,返回一个Map集合,它可以产生所有线程的堆栈轨迹。
Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
for(Thread t : map.keySet()){
StackTraceElement[] frames = map.get(t);
*code...*
}