2014-02-11 3 views
0

Мой вопрос Есть ли способ реализовать метод, который работает как printStackTrace() Я не знаю, как начать делать это действительно, возможно ли это? Это getStackTrace() - хороший выбор для меня.Mimic printStackTrace() метод в java

+4

Я считаю, что сообщество решает, голосовать ли вверх/вниз, а не ОП. – 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. 

или если вы просто хотите, чтобы получить трассировку стека в случае исключения, просто использовать ExceptionUtils из apache common библиотек.

ExceptionUtils.getFullStackTrace(ex); 
1

Вы можете сделать это с помощью Throwable класса. См. Код ниже:
Метод возвращает stacktrace.

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; 
} 
Смежные вопросы