Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะแสดงเฟรมสแต็กทั้งหมดของเธรดปัจจุบันใน Java 9 ได้อย่างไร


Stack Walking API สามารถให้กลไกที่ยืดหยุ่นในการสำรวจและดึงข้อมูลจาก call stack ที่ช่วยให้เราสามารถกรองและเข้าถึงเฟรมในลักษณะที่เกียจคร้าน StackWalker class เป็นจุดเริ่มต้นของ Stack Walking API การติดตามสแต็กเป็นตัวแทนของ call sttac 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