如何使用 Java 9 執行緒獲得堆疊跟蹤?
Java 9 已新增 StackWalker 類,以提供訪問當前執行緒堆疊的標準 API。在以前的 Java 版本中,我們可以使用Throwable::getStackTrace、Thread::getStackTrace 和SecurityManager:: GetClassContext提供的獲得執行緒堆疊的方法。
Thread.getStackTrace() 方法將返回一個表示執行緒棧轉儲的棧跟蹤元素陣列(StackTraceElement[])。陣列的第一個元素表示棧頂,它可以是序列中的最後一個方法呼叫,陣列的最後一個元素表示棧底,它可以是序列中的第一個方法呼叫。
語法
public StackTraceElement[] getStackTrace()
示例
import java.lang.StackWalker.Option;
public class GetStackTraceTest {
public static void main(String args[]) {
GetStackTraceTest.testPrintCurrnentStackTrace();
GetStackTraceTest.testShowReflectFrames();
}
// get StackTrace using Thread
public static void testPrintCurrnentStackTrace() {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
for(StackTraceElement element : stack) {
System.out.println(element);
}
}
// SHOW_REFLECT_FRAMES
public static void print(StackWalker stackWalker) {
stackWalker.forEach(stackFrame -> System.out.printf("%6d| %s -> %s %n",
stackFrame.getLineNumber(), stackFrame.getClassName(), stackFrame.getMethodName()));
}
public static void testShowReflectFrames() {
final StackWalker stackWalker = StackWalker.getInstance(Option.SHOW_REFLECT_FRAMES);
print(stackWalker);
}
}輸出
java.base/java.lang.Thread.getStackTrace(Thread.java:1654) GetStackTraceTest.testPrintCurrnentStackTrace(GetStackTraceTest.java:10) GetStackTraceTest.main(GetStackTraceTest.java:5) 17| GetStackTraceTest -> print 25| GetStackTraceTest -> testShowReflectFrames 6| GetStackTraceTest -> main
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP