首頁 >Java >java教程 >在Java 9中如何顯示目前執行緒的所有堆疊幀?

在Java 9中如何顯示目前執行緒的所有堆疊幀?

WBOY
WBOY轉載
2023-09-05 20:09:06844瀏覽

在Java 9中如何显示当前线程的所有堆栈帧?

Stack Walking API 可以提供靈活的機制來遍歷調用堆疊並提取信息,使我們能夠以惰性方式過濾和訪問幀。 StackWalker類別是 Stack Walking API 的入口點。堆疊追蹤表示某個時間點的呼叫堆疊,其中每個元素代表一個方法呼叫。它包含從線程啟動到生成的所有呼叫。

在下面的範例中,我們可以使用 StackWalker API 列印/顯示目前執行緒的所有堆疊幀。

範例
import java.lang.StackWalker.StackFrame;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;

public class StackWalkerTest {
   public static void main(String args[]) throws Exception {
      Method test1Method = Helper1.class.<strong>getDeclaredMethod</strong>("test1", (Class<!--?-->[])null);
      test1Method.invoke(null, (Object[]) null);
   }
}

<strong>// Helper1 class
</strong>class Helper1 {
   protected static void test1() {
      Helper2.test2();
   }
}

<strong>// Helper2 class</strong>
class Helper2 {
   protected static void test2() {
      <strong>List<StackFrame></strong> stack = <strong>StackWalker.getInstance().walk</strong>((s) -> s.<strong>collect</strong>(Collectors.toList()));
      for(<strong>StackFrame </strong>frame : stack) {
         System.out.println(frame.<strong>getClassName()</strong> + " " + frame.<strong>getLineNumber()</strong> + " " +    frame.<strong>getMethodName()</strong>);
      }
   }
}

輸出

<strong>Helper2 23 test2
Helper1 16 test1
StackWalkerTest 9 main</strong>

以上是在Java 9中如何顯示目前執行緒的所有堆疊幀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除
上一篇:茱莉亞 VS Java下一篇:茱莉亞 VS Java