我在ByteCode生成中使用BCEL,我只想在输入类的静态方法中的每一行之前打印出(println)。我试过使用BCEL进行测试,但是它会导致不同形式的错误。上面写着
Exception in thread "main" java.lang.VerifyError: StackMapTable error: bad offset in method C.max(Ljava/lang/String;II)I有时,如果我在任何指令上放置一些静态方法调用,它就会开始工作,而有时则不会。任何帮助都会很感激.
更新:我修复了它。它不是BCEL库中的东西,而是JDK版本(1.7),它没有验证我的工具化类。因此,如果有人遇到这样的问题,可以使用JDK1.6或使用JVM选项"-XX:-UseSplitVerifier“。
干杯
发布于 2013-03-20 17:09:28
StackMapTable是在50.0中引入的一个特性,在51.0中是强制性的,目的是通过在代码中的各个点包含关于类型的元数据来加速类文件验证。不幸的是,手工编写或调整是很痛苦的,所以除非您使用的是自动生成它的工具,否则最好完全删除它。
为了省略StackMapTable,需要将类更改为50.0或更早版本。但这不应该是一个真正的问题,因为51.0中添加的惟一特性是invokedynamic及其关系,编译后的Java从未使用过这些特性。
发布于 2015-10-07 06:41:28
目前,我在使用BCEL时遇到了类似的问题,我只想指出,JVM:-UseSplitVerifier arg在Java 8中不再可用。
https://stackoverflow.com/questions/15529535
复制相似问题