<code<Thread.currentThread().getStackTrace()</code<를 사용할 수 있습니다.
그러면 프로그램의 현재 스택 추적을 나타내는 StackTraceElement
의 배열이 반환됩니다.
Thread.currentThread().getStackTrace();
이후 JDK1.5. 사용할 수 있습니다.
이전 버전을 위한 리디렉션하십시오 렉스티온.프린츠타크트라스 () '을' 스트라이라이터 () ',' 수 있습니다.
StringWriter sw = new StringWriter();
new Throwable("").printStackTrace(new PrintWriter(sw));
String stackTrace = sw.toString();
스택 추적 얻을 수 있는 모든 스래드입니다 이스타크 유틸리티를 사용할 수 있습니다 - 끝냅니다끝내기 죽일거라고 전송하십시오 제콘솔 또는 신호 (의 Posix 운영 체제를).
그러나 이렇게 하려면 시도하시겠습니까 트레더마스빈 프로그래밍 방식으로 사용할 수 있습니다.
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] infos = bean.dumpAllThreads(true, true);
for (ThreadInfo info : infos) {
StackTraceElement[] elems = info.getStackTrace();
// Print out elements, etc.
}
앞에서 언급한 것처럼 경우에만 다운로드하려는 현재 스레드의 스택 추적을 it& # 39 의 많이유 간소화하는지 트레더스쿠르나토레더 그제스타크트라스 () ',' () - 됩니다
토니, 그 의견을 주신 최상의 방법이라고 실제로 어떤 대답을 수락됨 OP& # 39 에 있는 것으로 보인다) 이 질문에 답을 :
Arrays.toString(Thread.currentThread().getStackTrace());
. how to get a OP 한 것은 '에서' 예외 스택 추적 하나님께용서를 구체화하십시오 '에서'. 아파치 커먼즈 때, 비록 I& # 39 m 엄청난 팬이에요 뭔가 등 간단한 논리적 이유는 위의 외부 라이브러리에 사용할 수 없다.
내가 하는 것이 좋습니다.
Thread.dumpStack()
예외가 없는 것은 쉽게 활용할 수 있으며 실제로 전혀 문제가 될 수 없는 경우 또는 트로이블 건설 중이며, 더 크게 요점이지.
자바 가상 머신 (jvm) 에 9 새로운 방법이 있습니다.
public static void showTrace() {
List<StackFrame> frames =
StackWalker.getInstance( Option.RETAIN_CLASS_REFERENCE )
.walk( stream -> stream.collect( Collectors.toList() ) );
for ( StackFrame stackFrame : frames )
System.out.println( stackFrame );
}
I have a 유틸리티에는 문자열으로 되돌려줍니다 stacktrace 가 함께 하는 방법:
static String getStackTrace(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
t.printStackTrace(pw);
pw.flush();
sw.flush();
return sw.toString();
}
그리고 그냥 로짓과 같은.
...
catch (FileNotFoundException e) {
logger.config(getStackTrace(e));
}
StackTraceElement[] ste = Thread.currentThread().getStackTrace();
Arrays.asList(ste).forEach(System.out::println);
StringBuilder sb = new StringBuilder();
for (StackTraceElement st : ste) {
sb.append(st.toString() + System.lineSeparator());
}
System.out.println(sb);
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
마지막 요소에 어레이입니다 >, 가장 최근 메소드 호출, 이는 seabreeze 스택의 맨 아래에 있는 순서.
A StackTraceElement has getClassName(), getFileName(), getLineNumber() and getMethodName().
스타크트라시엘레먼트 반복하고 수 있으며, 원하는 결과를.
for (StackTraceElement ste : stackTraceElements )
{
//do your stuff here...
}
내가 답을 추가되든지 포맷을 사용하여 위와
public final class DebugUtil {
private static final String SEPARATOR = "\n";
private DebugUtil() {
}
public static String formatStackTrace(StackTraceElement[] stackTrace) {
StringBuilder buffer = new StringBuilder();
for (StackTraceElement element : stackTrace) {
buffer.append(element).append(SEPARATOR);
}
return buffer.toString();
}
public static String formatCurrentStacktrace() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
return formatStackTrace(stackTrace);
}
}
현재 사용할 수 있습니다 이스타크 유틸리티에는 확인하고 싶다면 콜 스택 프로세스의.
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F [-m] [-l] <pid>
(to connect to a hung process)
jstack [-m] [-l] <executable> <core>
(to connect to a core file)
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
(to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message