Slicer4j运行defects4j(一)--Slicer4j安装

运行动态切片的工具有Javaslicer,但是JavaSlicer也存在一系列问题,适应的jdk版本较低,无法处理多线程的数据。于是英属哥伦比亚大学的学者Khaled Ahmed提出了一种新的动态切片工具slicer4j。Slicer4J使用低开销的工具收集运行时执行跟踪;然后,它构造一个线程感知的、过程间动态控制流图,并使用该图来计算切片。

项目源码slicer4j

slicer4j安装

环境准备

python3 需要准备python3.8及以上,因为slicer4j中使用的python脚本低版本的python不支持。

sudo apt-get update
sudo apt-get install python3.9

jdk9及以上,slicer4j需要jdk9,但是defects4j项目在jdk9下运行时会出错,所以尽量还是把jdk8一块装上。

mvn3.9

building the tool

建立并且安装动态切片核心,从网址下载DynamicSlicingCore

cd core/
mvn -Dmaven.test.skip=true clean install
cd -

建立slicer4j,下载slicer4j

cd Slicer4J/
mvn -Dmaven.test.skip=true clean install
cd -

这里有个坑,如果使用这种方式建造,在使用slicer4j.py运行SlicerMe这个小测试项目的时候,生成不了东西,后来打包方式改变了,可以运行slicerMe了。可能的解决方法

mvn -Dmaven.test.skip=true clean compile assembly:single install

slicer4j介绍

主要有上图这几个文件夹,其中我理解的Slicer4j这个文件夹里面就是这个工具本身,毕竟进去把slicer4j工具编译安装了,scripts中提供了一些脚本,方便使用。benchmarks里面有一些项目,slicer4j,javaslicer和defects4j的,是基准测试集,用来比较和javaslicer的性能以及进行slicer4j使用体验的。 

slicer4j使用

官网上的使用Java进行的命令行代码我一直没用成功使用,老是出现java.lang.NoClassDefFoundError:soot/type  ,有朋友搞出来了可以在评论区告诉我一声。

java -cp "Slicer4J/target/slicer4j-jar-with-dependencies.jar:Slicer4J/target/lib/*" ca.ubc.ece.resess.slicer.dynamic.slicer4j.Slicer -h

但是运行scripts里面的脚本能运行起来

python3 slicer4j.py -h

这两行代码都是列出slicer的参数。

将slicer4j应用在实际项目上

进入benchmarks/SliceMe找到SliceMe项目,

mvn clean package

将项目打包,按照官网上在target目录下运行 java -jar sliceme-1.0.0.jar SlicerMe会报错

 需要修改jar包中的manifest.mf文件

这个项目就是不传入参数时会报错,这时候再使用scripts,py

cd scripts
python3 slicer4j.py -j ../benchmarks/SliceMe/target/sliceme-1.0.0.jar -o sliceme_slice/ -b SliceMe:9 -m "SliceMe"

就能成功在scripts下的sliceme_slice文件夹下查看所有的切片信息了

 这个项目目前bug还是挺多。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值