
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.<strong>getDeclaredMethod</strong>("test1", (Class<!--?-->[])null);
test1Method.invoke(null, (Object[]) null);
}
}
<strong>// Helper1 class
</strong>class Helper1 {
protected static void test1() {
Helper2.test2();
}
}
<strong>// Helper2 class</strong>
class Helper2 {
protected static void test2() {
<strong>List<StackFrame></strong> stack = <strong>StackWalker.getInstance().walk</strong>((s) -> s.<strong>collect</strong>(Collectors.toList()));
for(<strong>StackFrame </strong>frame : stack) {
System.out.println(frame.<strong>getClassName()</strong> + " " + frame.<strong>getLineNumber()</strong> + " " + frame.<strong>getMethodName()</strong>);
}
}
}<strong>Helper2 23 test2 Helper1 16 test1 StackWalkerTest 9 main</strong>
以上就是在Java 9中如何显示当前线程的所有堆栈帧?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号