我发现字节码VerifyErrors
非常难以调试。JVM 提供的反馈很少,通常只是当前类,有时是方法。
通过ASM或Jasmin手动设计字节码时,我通常会遇到一些错误示例:
Stack size too large
Unable to pop operand off an empty stack
Falling off the end of the code
Expecting to find object/array on stack
Incompatible object argument for function call
Inconsistent stack height 4 != 2
(要清楚;我知道所有这些意味着什么,我对调试它们的原因的工具或技术感兴趣。)
我的问题:是否有任何工具可以对这些类型的错误提供详细的反馈?例如,我会欣赏诸如
javap
- 类似的输出- 对行号(或操作码字节偏移)的引用
- 每行的操作数堆栈信息(类型/深度)
- 更具描述性的错误消息