Какой самый простой способ распечатать stacktrace из отладочной распечатки? Часто во время тестирования вы хотели бы знать столбец, ведущий к ситуации, вызывающей отладочное сообщение.
Как я в java добавить stacktrace в мою отладочную распечатку
Ответ 1
Ответ 2
Если вы используете log4j
Exception e = new Exception();
log.error("error here", e);
выведет стек в ваш журнал.
Ответ 3
Просто создание произвольного исключения делает трюк для меня:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
Ответ 4
Если вы хотите сохранить трассировку стека в String, вы можете сделать это:
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
Где e, очевидно, исключение.
Кроме того, звучит очень странно, чтобы автогенерировать собственное исключение, чтобы найти трассировку стека для отладки. Получите Eclipse и используйте его в режиме отладки, это действительно потрясающе.
Ответ 5
Как и то, что сказал @jjnguy, если у вас нет исключения, вы также можете вызвать Thread.getStackTrace().
Ответ 6
Вы должны поймать исключение в блоке try-catch.
e.getStackTrace();
Это возвращает StackTraceElement [], который вы затем можете интерпретировать.
также:
e.printStackTrace()
будет... распечатать stacktrace.
Ответ 7
Просто потому, что мне это было нужно самому:
Как вдохновлено ответом Как найти вызывающего метода с использованием stacktrace или reflection?, вы можете получить стек вызовов, используя
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
Затем вы обрабатываете и печатаете/регистрируете все, что вас интересует. Больше работы, чем использование Thread.dumpStack()
, но более гибкое.
Ответ 8
Чтобы просто распечатать текущую трассировку стека на stderr, вы можете вызвать:
Thread.dumpStack();
который сам вызывает:
new Exception("Stack trace").printStackTrace();
Чтобы вывести на stdout, а не stderr, перейдите System.out
в printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);