ASM字节码工程库中MethodVisitorclass的visitLocalVariable()方法有什么作用?

What does the visitLocalVariable() method of the MethodVisitor class in the ASM bytecode engineering library do?

我(第一次)在应用程序中使用 ASM 来创建 Java class 文件。这是我正在编写的编译器的后端。

我阅读了 ASM 文档的相关部分,对堆栈映射框架有疑问。 ASM 表示,如果 class writer 使用适当的标志进行初始化,它可以自动计算这些帧。我的问题是,这是否意味着我永远不必自己调用方法访问者的 visitLocalVariable() 方法?我不确定该方法的作用。文档确实说如果帧是自动计算的,我不需要调用 visitFrame() 方法,但它没有提到 visitLocalVariable() 方法。

visitLocalVariable() 描述或定义存储在 Code 属性的 LocalVariableTable and LocalVariableTypeTable 属性中的 debug 信息。它们不是正常操作所必需的,并且与存储在 StackMapTable.

中的信息不同

换句话说,除非你想提供调试信息,否则你永远不需要调用visitLocalVariable(),无论堆栈映射帧是否自动计算。


注意这些属性中存储的信息的差异。 LocalVariable[Type]Table 存储局部变量的名称和 [通用] 类型及其与源代码级语言有关的范围。 StackMapTable 存储关于字节码验证器的 JVM 类型系统的局部变量和操作数堆栈条目的类型信息。