Как я могу получить текущую трассировку стека в Java?
Как мне получить текущую трассировку стека в Java, например, как это можно сделать в .NET Environment.StackTrace?
Environment.StackTrace
Я нашел Thread.dumpStack() но это не то, что я хочу - я хочу получить трассировку стека обратно, а не распечатать ее.
Thread.dumpStack()
Переведено автоматически
Ответ 1
Вы можете использовать Thread.currentThread().getStackTrace().
Thread.currentThread().getStackTrace()
Это возвращает массив StackTraceElements, которые представляют текущую трассировку стека программы.
StackTraceElement
Ответ 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, когда есть что-то такое простое, как описано выше, нет логической причины использовать внешнюю библиотеку.
String
Exception