Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

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


스택 워킹 API 지연 방식으로 프레임을 필터링하고 액세스할 수 있도록 하는 호출 스택에서 정보를 탐색하고 추출하는 유연한 메커니즘을 제공할 수 있습니다. 스택워커 클래스는 스택 워킹 API의 진입점입니다. 스택 추적은 호출 스택을 나타냅니다. k 각 요소가 메서드 를 나타내는 특정 시점에서 호출 . 스레드 시작부터 생성된 지점까지의 모든 호출이 포함됩니다.

아래 예제에서는 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.getDeclaredMethod("test1", (Class[])null);
      test1Method.invoke(null, (Object[]) null);
   }
}

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

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

출력

Helper2 23 test2
Helper1 16 test1
StackWalkerTest 9 main