.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()
.