Java ASM字节码工程库中MethodVisitor类的visitLocalVariable()方法做什么?

Java ASM字节码工程库中MethodVisitor类的visitLocalVariable()方法做什么?,java,jvm,bytecode,java-bytecode-asm,.class-file,Java,Jvm,Bytecode,Java Bytecode Asm,.class File,我(第一次)在应用程序中使用ASM来创建Java类文件。这是我正在编写的编译器的后端 我阅读了ASM文档的相关部分,对堆栈映射框架有疑问。ASM表示,如果使用适当的标志初始化类编写器,它可以自动计算这些帧。我的问题是,这是否意味着我将永远不必亲自调用方法visitors上的visitLocalVariable()方法?我不确定这种方法的作用。文档中确实指出,如果帧是自动计算的,我不需要调用visitFrame()方法,但它对visitLocalVariable()方法不起作用。visitLoca

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

我阅读了ASM文档的相关部分,对堆栈映射框架有疑问。ASM表示,如果使用适当的标志初始化类编写器,它可以自动计算这些帧。我的问题是,这是否意味着我将永远不必亲自调用方法visitors上的visitLocalVariable()方法?我不确定这种方法的作用。文档中确实指出,如果帧是自动计算的,我不需要调用visitFrame()方法,但它对visitLocalVariable()方法不起作用。

visitLocalVariable()
描述或定义存储在
code
属性的and属性中的调试信息。它们不是正常操作所必需的,与存储在
堆栈映射表中的信息不同

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



请注意这些属性中存储的信息的差异
LocalVariable[Type]表
存储本地变量的名称和[generic]类型及其与源代码级语言有关的范围
StackMapTable
为字节码验证器存储有关JVM类型系统的本地变量和操作数堆栈项的类型信息。

Ah,这很有意义!非常感谢。