2014-02-11 60 views
0

我的問題是否有任何方法來實現一個像printStackTrace() 那樣工作的方法確實如此,我不知道該如何開始這樣做,這可能嗎? 是getStackTrace()對我來說是個不錯的選擇。在java中模仿printStackTrace()方法

+4

我相信社區決定是否投票上/下,而不是OP。 – bblincoe

+1

Sysout的每個條目'getStackTrace()'? – sp00m

+6

由於OP沒有顯示任何努力,所以這個問題似乎是無關緊要的。 –

回答

2

下面是官方的方式是如何做的(grepcode格式):

646 privatevoid printStackTrace(PrintStreamOrWriter s) {
647 // Guard against malicious overrides of Throwable.equals by
648 // using a Set with identity equality semantics.
649 Set < Throwable > dejaVu =
650 Collections. newSetFromMap (newIdentityHashMap < Throwable , Boolean >());
651 dejaVu. add (this);
653 synchronized (s. lock()) {
654 // Print our stack trace
655 s. println (this);
656 StackTraceElement [] trace = getOurStackTrace();
657 for (StackTraceElement traceElement : trace)
658 s. println ("\tat " + traceElement);
660 // Print suppressed exceptions, if any
661 for (Throwable se : getSuppressed())
662 se. printEnclosedStackTrace (s, trace, SUPPRESSED_CAPTION, "\t", dejaVu);
664 // Print cause, if any
665 Throwable ourCause = getCause();
666 if (ourCause != null)
667 ourCause. printEnclosedStackTrace (s, trace, CAUSE_CAPTION, "", dejaVu);
668 }
669 }

多一點關注的處理比你照理,但你可以很容易地刪除任何你不關心關於。

1

如果你想獲得任何時刻的堆棧跟蹤,你可以試試這個:

Thread.currentThread().getStackTrace();// this return an array of StackTraceElement loop over in order to print them. 

,或者如果你只是想獲得的情況下,異常的堆棧跟蹤,只需使用ExceptionUtilsapache common庫。

ExceptionUtils.getFullStackTrace(ex); 
1

你可以在Throwable類的幫助下做到這一點。請參閱下面的代碼:
該方法返回堆棧跟蹤。

public String tracePoint() 
{ 
    String trace = ""; 
    Throwable t = new Throwable(); 
    StackTraceElement[] s = t.getStackTrace(); 
    for(int i=0; i<s.length; i++) 
    { 
     trace += s[i] + "\n"; 
    } 
    return trace; 
}