ホームページ > Java > &#&チュートリアル > Java 9で現在のスレッドのすべてのスタックフレームを表示するにはどうすればよいですか?

Java 9で現在のスレッドのすべてのスタックフレームを表示するにはどうすればよいですか?

WBOY
リリース: 2023-09-05 20:09:06
転載
856 人が閲覧しました

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

スタック ウォーキング 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート