2008-09-10 60 views

回答

2

您應該捕獲try-catch塊中的異常。

e.getStackTrace(); 

返回StackTraceElement [],然後您可以解釋。

另外:

e.printStackTrace() 

會...打印堆棧跟蹤。

4

只是創造一個任意異常的伎倆對我來說:

System.out.println("Oops, the bad thing happened"); 
new IllegalStateException().printStackTrace(); 
+0

你應該有理由不要使用Thread.getStackTrace()。 – jjnguy 2008-09-10 18:14:12

+0

我相信這個方法會在一些IDE中引起警告,比如IntelliJ,因爲你創建了一個異常但不會拋出它。 我推薦使用Thread.getStackTrace()方法,它具有相同的邏輯,但它對開發人員來說是隱藏的。 – 2008-09-10 18:15:43

+0

如果您只是想將它發送到stderr,Thread.dumpStack()會更容易(保存必須自己遍歷堆棧跟蹤元素)。 – 2008-09-10 18:29:16

3

以及什麼@jjnguy說,如果你沒有一個例外,你也可以撥打Thread.getStackTrace()。

4

如果你想保存堆棧跟蹤到一個字符串,你可以做到這一點;

String exception = ""; 
for (StackTraceElement element : e.getStackTrace()) 
    exception += element.toString() + "\n"; 

其中e很明顯是一個例外。

此外,聽起來很奇怪自動生成一個自己的異常只是爲了找到調試的堆棧跟蹤。獲取Eclipse並使用它的調試模式,這真的很棒。

16

如果您使用log4j的

Exception e = new Exception(); 
log.error("error here", e); 

將打印堆棧跟蹤到你的日誌。

1

要簡單地打印出當前堆棧跟蹤到stderr,您可以撥打:

Thread.dumpStack(); 

它本身只是調用:

new Exception("Stack trace").printStackTrace(); 

輸出到標準輸出,而不是標準錯誤,通過System.outprintStackTrace()

new Exception("Stack trace").printStackTrace(System.out);