我想简化我的 asm 代码。 到目前为止,我正在使用 Eclipse 中的字节码大纲来学习如何编写我的代码。由于我只看到带有调试信息的字节码,我真的不知道我可以安全地忽略哪些内容,我更希望有知识的人快速回答我自己测试每一种可能的情况。
这些假设是否正确?
- 我可以混合不同的样式,即使是在同一个类或方法中(将没有调试信息的代码注入(inject)到有调试信息的方法中)
visitLabel
只需要作为跳转指令的目标,而不是围绕每条指令visitLineNumber
可以省略(调试信息)visitLocalVariable
可以省略(调试信息)
谢谢!
最佳答案
您可以在没有调试信息的情况下编译代码,以便在字节码大纲 View 中查看它,例如为此在 Eclipse 中使用单独的项目。
现在回答你的问题:
- 您可以混合使用带调试和不带调试的代码。请注意,在调试此类代码时,调试器不会显示调试信息中省略的变量。
- visitLabel 调用用于标记字节码中的任何位置,例如跳转指令的目标,异常处理程序范围和异常处理程序入口点的边界,局部变量和行号的范围,一些新引入的类型注释(即 JSR308 )等。
- visitLineNumber 生成有关调试器主要使用的行号的信息,可以省略
- visitLocalVariable 生成有关主要由调试器使用的本地变量的信息,可以省略
关于java - ASM 中的哪些指令仅用于调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070402/