Как в Java добавить трассировку стека к моей распечатке отладки - PullRequest
11 голосов
/ 10 сентября 2008

Какой самый простой способ напечатать трассировку стека из отладочной распечатки? Часто во время тестирования вы хотели бы знать, что стек вызовов вызывает ситуацию, вызывающую отладочное сообщение.

Ответы [ 8 ]

17 голосов
/ 12 сентября 2008

Если вы используете log4j

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

напечатает трассировку стека в ваш журнал.

9 голосов
/ 10 сентября 2008
5 голосов
/ 11 сентября 2008

Если вы хотите сохранить трассировку стека в строку, вы можете сделать это;

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

Где e, очевидно, исключение.

Кроме того, звучит очень странно, чтобы автоматически генерировать собственное исключение, просто чтобы найти трассировку стека для отладки. Получить Eclipse и использовать его режим отладки, это действительно круто.

4 голосов
/ 10 сентября 2008

Просто создание произвольного исключения помогает мне:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
3 голосов
/ 10 сентября 2008

Кроме того, что сказал @jjnguy, если у вас нет исключения, вы также можете вызвать Thread.getStackTrace ().

2 голосов
/ 06 апреля 2016

Чтобы просто напечатать текущую трассировку стека в stderr, вы можете позвонить:

Thread.dumpStack();

который сам просто вызывает:

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

Для вывода на стандартный вывод вместо stderr, передайте System.out на printStackTrace():

new Exception("Stack trace").printStackTrace(System.out);
2 голосов
/ 10 сентября 2008

Вы должны перехватить исключение в блоке try-catch.

e.getStackTrace();

Возвращает StackTraceElement [], который затем можно интерпретировать.

Также:

e.printStackTrace()

будет ... печатать трассировку стека.

1 голос
/ 16 ноября 2009

Просто потому, что мне это нужно было самому:

Как подсказывает ответ Как найти вызывающего метода, использующего трассировку стека или отражение? , вы можете получить стек вызовов, используя

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

Затем вы обрабатываете и печатаете / записываете все, что вам интересно. Больше работы, чем при использовании Thread.dumpStack(), но более гибко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...