如何在 Java 9 中显示当前线程的所有堆栈帧?
javaobject oriented programmingprogramming更新于 2025/9/10 14:36:17
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.getDeclaredMethod("test1", (Class[])null);
test1Method.invoke(null, (Object[]) null);
}
}
// Helper1 classclass 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
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

