You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JCute执行Concolic Testing时遭遇Soot错误求助

解决JCute运行时"Unknown tag in constant pool: 18"错误

首先,这个报错Unknown tag in constant pool: 18 at entry 15的核心原因很明确:JCute的字节码处理工具不识别Java 7及更高版本引入的INVOKEDYNAMIC常量池标签(标签值为18)。作为一款相对老旧的自动化测试工具,JCute对Java 8+的字节码特性兼容性较差,下面是具体的排查和修复步骤:

1. 降级Java运行环境

JCute官方推荐使用Java 6或Java 7早期版本(避免包含INVOKEDYNAMIC相关特性),先检查你当前的Java版本:

java -version

如果输出是Java 8及以上,切换到Java 6/7环境,确保JAVA_HOME和PATH都指向对应版本的Java目录,避免调用系统默认的高版本Java。

2. 修正Instrument命令的语法错误

你的原命令存在几个明显的语法问题,这也可能导致工具解析异常:

  • -> keep-line-number格式错误,JCute参数应该用-keep-line-number(前缀是短横线而非箭头)
  • > --app MyTest1完全错误,输出重定向符号>后应跟文件路径,--app作为工具参数要放在正确位置

修正后的正确命令如下:

cd /opt/jcute/tmpjcute && java -Xmx512m -Xms512m -Dcute.sequential=true cute.instrument.CuteInstrumenter -keep-line-number -d /opt/jcute/tmpjcute/classes -x com.vladium -x cute -x lpsolve --app MyTest1

注意用&&连接cd和java命令,确保目录切换成功后再执行工具,参数顺序要合规,--app指定的目标类放在最后。

3. 优化环境变量配置

你的环境变量存在冗余和不必要的设置,建议调整为:

export LD_LIBRARY_PATH=/opt/jcute/
export PATH=/opt/jcute/:$PATH  # 确保JCute工具优先,同时保留系统原有PATH
export CLASSPATH=/opt/jcute/tmpjcute/classes:/opt/jcute/jcute.jar
  • JAVA_LIB_PATH不是标准环境变量,可直接移除
  • CLASSPATH里重复的jcute.jar要删掉,避免冲突

4. 重编译测试类为低版本字节码

如果你的MyTest1类是用Java 8+编译的,即使运行环境降级,字节码里依然会包含INVOKEDYNAMIC标签。需要用Java 6/7的编译器重新编译:

javac -target 1.6 -source 1.6 MyTest1.java

编译完成后将class文件放到/opt/jcute/tmpjcute/classes目录下,再重新执行Instrument命令。

按以上步骤逐一排查,应该能解决这个常量池标签错误。

内容的提问来源于stack exchange,提问作者Dalia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:26:39