>  기사  >  Java  >  Java 9에서 현재 스레드의 모든 스택 프레임을 표시하는 방법은 무엇입니까?

Java 9에서 현재 스레드의 모든 스택 프레임을 표시하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-09-05 20:09:06800검색

在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 자바다음 기사:줄리아 VS 자바