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