Как я в java добавить stacktrace в мою отладочную распечатку

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

Ответ 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);