Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ASM 4.1常量池中的visitLdcInsn非法类型_Java_Bytecode_Cobertura_Java Bytecode Asm - Fatal编程技术网

Java ASM 4.1常量池中的visitLdcInsn非法类型

Java ASM 4.1常量池中的visitLdcInsn非法类型,java,bytecode,cobertura,java-bytecode-asm,Java,Bytecode,Cobertura,Java Bytecode Asm,我正在使用ASM4.1。我知道visitldcinn方法需要49版或更高版本,但是我想知道如何让visitldcinn与49版或更低版本一起工作。我知道解决方案是让人们使用更高版本进行编译,但我不认为这是向人们建议的合适解决方案。以下是一些测试代码,当我尝试插入时,会出现异常: package mypackage; public class JDK4TEST { public static void main(String[] args) { } } 我得到以下例外情况: 线程“m

我正在使用ASM4.1。我知道visitldcinn方法需要49版或更高版本,但是我想知道如何让visitldcinn与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方法从一开始就存在,但一些可接受的参数类型取决于类格式版本,例如,
类型
句柄
值对于类格式51.0及更高版本是可接受的。看


还要注意的是,ASM的
ClassWriter
不会检查生成的字节码的有效性。您需要在
ClassWriter
之前添加到访客链中,谢谢!CheckClassAdapter类帮助我进一步调试异常的确切来源。问题的根本原因是我向visitLdcInsn传递的类类型与以前的版本不兼容。