Мой вопрос Есть ли способ реализовать метод, который работает как printStackTrace()
Я не знаю, как начать делать это действительно, возможно ли это? Это getStackTrace()
- хороший выбор для меня.Mimic printStackTrace() метод в java
0
A
ответ
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;
}
Я считаю, что сообщество решает, голосовать ли вверх/вниз, а не ОП. – bblincoe
Sysout каждая запись 'getStackTrace()'? – sp00m
Этот вопрос не соответствует теме, поскольку OP не показывает никаких усилий. –