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