当前位置: 首页 > 知识库问答 >
问题:

Java8:在分支目标65处期望堆栈图帧

洪弘亮
2023-03-14

使用jdk 1.8.051Source=1.7,target=1.7 Junit 4.6,ant 1.8.0

发生了什么事<所有以1.7通过的测试现在都失败了。我需要知道以下几点:

  1. 为什么会这样?
  2. 有没有像-XX:-UseSplitVeriator(java 1.7)这样的选项
  3. 如何找出问题的根源?
  4. 要采取什么步骤来解决这个问题?

我们有用于构建、部署和测试的ant目标
构建和部署工作正常,但Junit测试在所有模块中都失败了
我尝试升级ant(1.8.9)、junit 4.10
这可能是因为没有使用java 1.8编译的jar吗
我应该确保我使用的所有JAR都是用java8编译的吗?如果是这样的话,这可能是一个不好的迹象:(



java-cp./目标/包测试:./目标/mycompany-common.jar:./lib/junit-4.6.jarorg.junit.runner.JUnitCorecom.mycompany.JunitTest

===================================================================================== 
          Tests:    1
        Batches:    1
        Threads:    1
           Host: remote


=====================================================================================
TEST                                                    RUN FAIL ERR SKIP    DURATION
JunitTest                                                1    1              0.068 sec
-------------------------------------------------------------------------------------
TOTAL                                                    1    1     
=====================================================================================
The following tests had failures or errors:
com.mycompany.JunitTest

The failures and errors can be seen in the following files:
/target/reports/junit/TEST-com.mycompany.JunitTest.txt

Results of first failed test:
Testsuite: com.mycompany.JunitTest
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.068 sec

Testcase: test took 0.018 sec
    Caused an ERROR
Expecting a stackmap frame at branch target 65
Exception Details:
  Location:
    com/mycompany/Identifier.equals(Ljava/lang/Object;)Z @26: ifne
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0x0000000: 033d 11ff ff3e 1215 1100 35b8 001b 2bc1
    0x0000010: 0002 1100 353d 1100 003e 9a00 271c 1100
    0x0000020: 35a0 0016 1d11 0000 a000 0f12 151c 1d04
    0x0000030: b800 4111 ffff 3e12 1511 0036 b800 1b03
    0x0000040: ac1d 9b00 0f12 151c 1d03 b800 4111 ffff
    0x0000050: 3e12 1511 0039 b800 1b2b c000 023a 0412
    0x0000060: 1511 003a b800 1b2a b400 2619 04b4 0026
    0x0000070: b600 43ac                              
  Stackmap Table:
    same_frame_extended(@89)

java.lang.VerifyError: Expecting a stackmap frame at branch target 65
Exception Details:
  Location:
    com/mycompany/Identifier.equals(Ljava/lang/Object;)Z @26: ifne
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0x0000000: 033d 11ff ff3e 1215 1100 35b8 001b 2bc1
    0x0000010: 0002 1100 353d 1100 003e 9a00 271c 1100
    0x0000020: 35a0 0016 1d11 0000 a000 0f12 151c 1d04
    0x0000030: b800 4111 ffff 3e12 1511 0036 b800 1b03
    0x0000040: ac1d 9b00 0f12 151c 1d03 b800 4111 ffff
    0x0000050: 3e12 1511 0039 b800 1b2b c000 023a 0412
    0x0000060: 1511 003a b800 1b2a b400 2619 04b4 0026
    0x0000070: b600 43ac                              
  Stackmap Table:
    same_frame_extended(@89)

    at com.mycompany.JunitTest.test(JunitTest.java:17)

共有3个答案

严亦
2023-03-14

从Java1.7升级到1.8时,我也遇到了类似的问题。在运行Parasoft Jtest单元测试用例时,我遇到了“在分支目标12处期望堆栈图框架”错误。这个问题是通过在Eclipse中向JRE定义添加[-不验证]VM参数来解决的。

晏炳
2023-03-14

在将应用程序从1.6迁移到1.7时,我也面临同样的挑战,但我能够修复它。

方法1:您可以使用-XX:-UseSplitVerifier参数来解决这个问题,并且不需要担心升级库文件。

方法2:我遵循以下步骤来解决问题:

  1. 确定并保留应用程序使用的外部库的列表

找出哪个库导致了这个问题并将其逮捕是一个缓慢而痛苦的过程。

萧自珍
2023-03-14

从Java8开始,没有对应的--usesplit核查符。

>

如果使用Eclipse,也可以使用windows-

 类似资料:
  • 成功地编译了项目,并与Maven一起构建。这是我的第一个maven项目。但我不知道为什么会出现下面的错误。 在tomcat上部署war,点击我的url,并在我的浏览器中显示以下错误。 有人能提供一些信息吗?谢谢你的帮助。 配置:

  • 一个运行良好的应用程序项目已经开始在Android Studio中给出这个错误。我尝试过各种各样的事情,比如改变主楼的结构。xml文件、更改Google Play服务版本等,但没有任何帮助。这个错误出现在“显示”选项卡中,我尝试使用api 18进行查看。此外,由于某些原因,间隙广告的填充率已降至0,并且不会返回任何填充。 建筑格拉德尔

  • 我正在开发我的公司项目。 我有2个表。我用一个多-多个关系连接到这个表。我使用postgreSql。 但我得到了这个错误。 原因:java。lang.VerifyError:在分支目标5处应为stackmap帧异常详细信息:位置:com/karcin/template/persistence/entities/TblAgentPropertyParameters。类$(Ljava/lang/Str

  • 升级到JDK 1.7后,我遇到了以下异常:

  • 我使用Cobertura进行代码覆盖,但在运行测试用例时,当我使用maven构建运行测试用例时,所有测试用例都失败了,错误如下。 但是,当我使用Eclipse作为JUnit命令运行相同的测试用例时,它工作得很好。

  • 例外情况详情: 位置:com/sonicsw/mf/comm/jms/ConnectorClient。setRequestTimeout(J)V@3:ifnonnull原因:此位置应为stackmap帧。 谁能解决这个问题?谷歌搜索了一个多星期,并尝试了所有可能的替代方案。Used-XX:-UseSplitVerifier。它也不起作用。使用noverify选项,效果很好。Java版本是1.7.0