Вопрос-ответ

How can I get the current stack trace in Java?

Как я могу получить текущую трассировку стека в Java?

Как мне получить текущую трассировку стека в Java, например, как это можно сделать в .NET Environment.StackTrace?

Я нашел Thread.dumpStack() но это не то, что я хочу - я хочу получить трассировку стека обратно, а не распечатать ее.

Переведено автоматически
Ответ 1

Вы можете использовать Thread.currentThread().getStackTrace().

Это возвращает массив StackTraceElements, которые представляют текущую трассировку стека программы.

Ответ 2
StackTraceElement[] st = Thread.currentThread().getStackTrace();

прекрасно, если вам все равно, что такое первый элемент стека.

StackTraceElement[] st = new Throwable().getStackTrace();

будет иметь определенную позицию для вашего текущего метода, если это имеет значение.

Ответ 3
for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
System.out.println(ste + "\n");
}
Ответ 4

Тони, в качестве комментария к принятому ответу, дал то, что кажется лучшим ответом, который на самом деле отвечает на вопрос OP:

Arrays.toString(Thread.currentThread().getStackTrace()).replace( ',', '\n' );

... OP НЕ спрашивал, как получить String из трассировки стека из Exception. И хотя я большой поклонник Apache Commons, когда есть что-то такое простое, как описано выше, нет логической причины использовать внешнюю библиотеку.

2023-11-30 22:24 java