0

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

4

1 回答 1

2

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

另请注意,ASMClassWriter不会检查生成的字节码的有效性。您需要先将CheckClassAdapter添加到访问者的链中ClassWriter

于 2013-06-13T13:56:04.333 回答