ASM中的哪些指令仅用于调试?

时间:2012-08-22 09:44:13

标签: java java-bytecode-asm

我想简化我的asm代码。 到目前为止,我正在使用Eclipse中的字节码大纲来学习如何编写代码。因为我只看到带有调试信息的字节码,所以我真的不知道哪些东西我可以安全地遗漏,我更喜欢有知识的人快速回答我自己测试每一个可能的情况。

这些假设是真的吗?

  1. 我可以混合使用不同的样式,即使是在同一个类或方法中(没有调试信息的代码注入带有调试信息的方法)
  2. visitLabel仅作为跳转指令的目标,而不是每条指令
  3. visitLineNumber可以省略(调试信息)
  4. visitLocalVariable可以省略(调试信息)
  5. 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以编译没有调试信息的代码,以便在字节码大纲视图中查看它,例如在Eclipse中使用单独的项目。

现在回答你的问题:

  1. 您可以将代码与调试混合,无需调试。请注意,在调试此类代码时,调试器不会显示调试信息中省略的变量。
  2. visitLabel调用用于标记字节码中的任何位置,例如跳转指令的目标,异常处理程序范围的边界和异常处理程序入口点,局部变量和行号的范围,一些新引入的类型注释(即JSR308)等。
  3. visitLineNumber生成有关主要由调试器使用的行号的信息,可以省略
  4. visitLocalVariable生成有关主要由调试器使用的本地变量的信息,可以省略