我已经切换到最新的JDK 7,我遇到了在emma覆盖工具打乱的字节代码上运行testng单元测试的问题.我的测试用例都没有正确运行,对于大多数测试用例我都收到了这样的错误.
java.lang.ClassFormatError: Illegal local variable table length 10 in method measurement.meter.AbstractSerialPortMeter.<init>(Lmeasurement/meter/SerialPort;)V at measurement.meter.Elc3133aTest.setUp(Elc3133aTest.java:42)
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一篇文章JSR 292 Goodness Fast Code Coverage Tool Less 10k,它说"JSR 292引入了一个新的字节码指令invokedynamic,但也有几种新的常量池常量.这意味着大多数解析字节码的工具都像ASM,BCEL,findbugs或EMMA需要更新为兼容java 7."
检查了艾玛的主页,但看起来它已经很久没有更新了.
有人解决了类似的问题吗?
我也曾尝试过Cobertura.它看起来工作得更好但我得到了很多类型的例外VerifyError
.
java.lang.VerifyError: Expecting a stackmap frame at branch target 85 in method measurement.meter.AbstractSerialPortMeter.close()V at offset 26
at measurement.meter.AbstractSerialPortMeterTest.setUp(AbstractSerialPortMeterTest.java:27)
Run Code Online (Sandbox Code Playgroud) 当我使用JDK 7在eclipse indigo中编译我的项目时,我得到以下错误对话框
使用以下堆栈跟踪
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 32 in method ... at offset 0
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我在这里发现了一个相关的bug 并使用了建议的使用jvm选项的解决方法,-XX:-UseSplitVerifier
尽管它有效,但这个bug仍然让我感到困惑.
有谁知道为什么会这样,为什么解决方法......有效?
该项目使用JDK 6进行编译.