在 Java 9 中如何打印 StackFrame API 中的所有属性?


StackWalker APIJava 9 中的一项新功能,它提高了 前身堆栈跟踪元素的性能。它还可以提供一种在 异常情况下或了解 应用程序行为的情况下筛选堆栈元素的方法。在 Java 9 中,访问堆栈跟踪的方式非常有限,并且一次性提供整个堆栈信息。

在下面的示例中,我们需要打印 Stack Frame 中的所有属性

示例

import java.lang.StackWalker.StackFrame;
import java.util.*;
import java.util.stream.*;
import java.lang.StackWalker.Option;

public class AllAttributesTest {
   public static void main(String args[]) {
      System.out.println("Java 9 Stack Walker API - Print all attributes in stack frame");
      StackWalker newWalker = StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE);
      List<StackWalker.StackFrame> stackFrames = newWalker.walk(frames ->  frames.limit(1).collect(Collectors.toList()));
      stackFrames.forEach(test-> {
         System.out.printf("[Bytecode Index] %d%n", test.getByteCodeIndex());
         System.out.printf("[Class Name] %s%n", test.getClassName());
         System.out.printf("[Declaring Class] %s%n", test.getDeclaringClass());
         System.out.printf("[File Name] %s%n", test.getFileName());
         System.out.printf("[Method Name] %s%n", test.getMethodName());
         System.out.printf("[Is Native] %b%n", test.isNativeMethod());
         System.out.printf("[Line Number] %d%n", test.getLineNumber());
      });
   }
}

输出

Java 9 Stack Walker API - Print all attributes in stack frame
[Bytecode Index] 21
[Class Name] AllAttributesTest
[Declaring Class] class AllAttributesTest
[File Name] AllAttributesTest.java
[Method Name] main
[Is Native] false
[Line Number] 10

更新时间: 31-Mar-2020

150 次浏览

开启您的 事业

通过完成课程获得认证

入门
广告
© . All rights reserved.