Java的e.printStackTrace()不打印内部异常的堆栈跟踪的所有细节。获取完整的字符串堆栈跟踪,包括内部异常
是否有现成的方式来生成字符串形式的完整堆栈跟踪? (除了格式化它自己)
编辑
我刚刚发现了什么的printStackTrace()做 - 显然堆栈帧它过滤掉正是共同的内部异常和外一个的人。所以实际上它就是我想要的,而不是“完整的”堆栈跟踪。
Java的e.printStackTrace()不打印内部异常的堆栈跟踪的所有细节。获取完整的字符串堆栈跟踪,包括内部异常
是否有现成的方式来生成字符串形式的完整堆栈跟踪? (除了格式化它自己)
编辑
我刚刚发现了什么的printStackTrace()做 - 显然堆栈帧它过滤掉正是共同的内部异常和外一个的人。所以实际上它就是我想要的,而不是“完整的”堆栈跟踪。
我结束了我自己的滚动(我把Throwable.printStackTrace()的执行和调整了一点):
public static String joinStackTrace(Throwable e) {
StringWriter writer = null;
try {
writer = new StringWriter();
joinStackTrace(e, writer);
return writer.toString();
}
finally {
if (writer != null)
try {
writer.close();
} catch (IOException e1) {
// ignore
}
}
}
public static void joinStackTrace(Throwable e, StringWriter writer) {
PrintWriter printer = null;
try {
printer = new PrintWriter(writer);
while (e != null) {
printer.println(e);
StackTraceElement[] trace = e.getStackTrace();
for (int i = 0; i < trace.length; i++)
printer.println("\tat " + trace[i]);
e = e.getCause();
if (e != null)
printer.println("Caused by:\r\n");
}
}
finally {
if (printer != null)
printer.close();
}
}
我建议您使用Apache Commons lang中的ExceptionUtils类,它为此提供了有用的方法。
你的意思是 - 内部异常的堆栈跟踪?捕获的异常是否在另一个异常中传播? – Everyone 2009-08-18 10:10:49
东西是由一个catch产生的......抛出新的异常(“foo”,e) – ripper234 2009-08-18 11:27:23
我刚刚发现了printStackTrace()所做的 - 显然它滤出的堆栈帧恰好是内部异常和外部一。所以实际上它就是我想要的,而不是“完整的”堆栈跟踪。 – ripper234 2009-08-18 11:52:36