[java] Java에서 현재 스택 추적을 어떻게 얻을 수 있습니까?

.NET에서와 같이 Java에서 현재 스택 추적 을 얻는 방법은 무엇 Environment.StackTrace입니까?

발견 Thread.dumpStack()했지만 원하는 것은 아닙니다. 스택 추적을 다시 인쇄하고 싶지는 않습니다.



답변

사용할 수 있습니다 Thread.currentThread().getStackTrace().

StackTraceElement프로그램의 현재 스택 추적을 나타내는의 배열을 반환합니다 .


답변

Thread.currentThread().getStackTrace();

스택의 첫 번째 요소가 무엇인지 신경 쓰지 않으면 괜찮습니다.

new Throwable().getStackTrace();

중요한 경우 현재 방법에 대해 정의 된 위치를 갖습니다.


답변

for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
    System.out.println(ste);
}


답변

Thread.currentThread().getStackTrace();

JDK1.5부터 사용 가능합니다.

이전 버전의 경우, 리디렉션 할 수 있습니다 exception.printStackTrace()A를 StringWriter():

StringWriter sw = new StringWriter();
new Throwable("").printStackTrace(new PrintWriter(sw));
String stackTrace = sw.toString();


답변

이를 위해 Apache 공통점을 사용할 수 있습니다.

String fullStackTrace = org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e);


답변

안드로이드에서 훨씬 쉬운 방법은 이것을 사용하는 것입니다.

import android.util.Log;
String stackTrace = Log.getStackTraceString(exception); 


답변

모든 스레드의 스택 추적을 얻으려면 jstack 유틸리티 인 JConsole을 사용하거나 kill -quit 신호를 보내십시오 (Posix 운영 체제에서).

그러나 프로그래밍 방식 으로이 작업을 수행하려면 ThreadMXBean을 사용해보십시오.

ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] infos = bean.dumpAllThreads(true, true);

for (ThreadInfo info : infos) {
  StackTraceElement[] elems = info.getStackTrace();
  // Print out elements, etc.
}

언급했듯이 현재 스레드의 스택 추적 만 원한다면 훨씬 쉽습니다 Thread.currentThread().getStackTrace().