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