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