visitLdcInsn常量池中的非法类型



我正在使用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代码的一部分

visitLdcInsn方法从一开始就存在,但一些可接受的参数类型取决于类格式版本,例如TypeHandle值对于类格式51.0及更高版本是可接受的。参见相应的JavaDoc。

还要注意,ASM的ClassWriter不检查生成的字节码的有效性。您需要在ClassWriter之前将CheckClassAdapter添加到访问者链中。

最新更新