我正在使用ASM 4.1。我知道方法visitLdcInsn需要49或更高版本,但我想知道如何让visitLdcInsn与49及更低版本一起使用。我知道一个解决方案是让人们使用更高版本进行编译,但我不认为这是向人们建议的正确解决方案。这是一些测试代码,当我尝试仪器时,我得到了异常:
package mypackage;
public class JDK4TEST {
public static void main(String[] args) {
}
}
我收到以下异常: 线程“main”中的异常java.lang.VerifyError :(类:mypackage / JDK4TEST,方法:__ cobertura_classmap签名:(Lnet / sourceforge / cobertura / coveragedata / LightClassmapListener;)V)常量池中的非法类型
如果需要更多代码,这是github上的cobertura 2.0代码的一部分。
答案 0 :(得分:2)
visitLdcInsn
方法从一开始就存在,但是一些接受的参数类型取决于类格式版本,例如:类格式51.0及更高版本可接受Type
和Handle
值。请参阅corresponding JavaDoc。
另请注意,ASM的ClassWriter
并未检查生成的字节码的有效性。您需要在ClassWriter
之前将CheckClassAdapter添加到访问者链中。