java – 用于调试VerifyError的好工具

我发现字节码 VerifyErrors臭名昭着地很难调试. JVM提供很少的反馈,通常只是当前的类,有时是方法.

通过ASMJasmin手动工程化字节码时,我通常会遇到的一些错误示例:

>堆栈大小太大
>无法从一个空的堆栈弹出操作数
>掉落代码的末尾
>期望在堆栈上找到对象/数组
>函数调用不兼容的对象参数
堆栈高度不一致4!= 2

(要清楚,我知道这些都是什么意思,我对调试其原因的工具或技术感兴趣.)

我的问题:有没有任何工具可以对这些类型的错误提供详细的反馈?我会喜欢诸如此类的信息

> javap-like输出
>引用行号(或操作码字节偏移)
>每行的操作数堆栈信息(类型/深度)
>更多描述性错误消息

解决方法

我想你可以使用ASM提供的CheckClassAdapter( http://asm.ow2.org/asm40/javadoc/user/org/objectweb/asm/util/CheckClassAdapter.html).它提供有关验证错误的更多详细信息.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...