IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 如何把JCK测试集中的程序单独拿出来测试 -> 正文阅读

[开发工具]如何把JCK测试集中的程序单独拿出来测试

以brkp00102为例

1 在IDEA中建立工程

找到课题在JCK测试集中的位置,将对应的文件夹拷贝到需要单独进行调试的位置

cp $HOME/src/java/jck8b/JCK-runtime-8b/tests/vm/jvmti/Breakpoint/brkp001/brkp00102 $HOME/src/java/

然后使用IDEA在此文件夹下建立工程

2 根据源码修改文件夹

打开brkp00102.java文件可以看到下面的代码

package javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102;

根据Java语言可知,此文件应在javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102包下方可正常编译,于是,在IDEA中创建对应的文件夹,并将文件移至此文件夹之下

除此之外,通过以下代码可知该程序须依赖类

import javasoft.sqe.jck.lib.jvmti.Agent;
import javasoft.sqe.jck.lib.jvmti.SafeThread;

通过在JCK-runtime-8b文件夹下使用find命令查找对应的文件

find -name Agent.java
./src/javasoft/sqe/jck/lib/jvmti/Agent.java
?
find -name SafeThread.java
./src/javasoft/sqe/jck/lib/jvmti/SafeThread.java

按照import代码指定的位置在IDEA中创建文件夹,并将Agent.java和SafeThread.java文件拷贝到对应的位置

同理,拷贝AttachConnector.java文件到对应的位置

3 分析程序并生成.so文件

通过分析程序可知,该程序使用了JNI,即.so文件,但使用了何种jni文件未知,通过打开brkp00102.ksh文件

"$JAVA_HOME/bin/java" -agentlib:jckjvmti=brkp00102 javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102.brkp00102 -platform.jvmtiSupported $PLATFORM_JVMTISUPPORTED -platform.nativeLibsLinkage $PLATFORM_NATIVELIBSLINKAGE

该程序在运行时须依赖libjckjvmti.so库

注意:此时不必通过brkp00102.c文件把所有的关联文件放入到当前目录,并使用gcc去编译自己所需的.so文件,直接使用下面的命令编译出所需的.so文件

gcc -fPIC -shared -o libjckjvmti.so -I $HOME/src/java/jck8b/JCK-runtime-8b -I $HOME/src/java/jck8b/JCK-runtime-8b/src/share/lib/jvmti/include -I $HOME/src/java/jck8b/JCK-runtime-8b/src/share/lib/jni/include -I $HOME/src/java/jck8b/JCK-runtime-8b/src/share/lib/jni/include/solaris $HOME/src/java/jck8b/JCK-runtime-8b/src/share/lib/jvmti/jckjvmti.c

将此libjckjvmti.so拷贝至out/production对应的目录下即可

4 运行测试程序

根据brkp00102.ksh中

"$JAVA_HOME/bin/java" -agentlib:jckjvmti=brkp00102 javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102.brkp00102 -platform.jvmtiSupported $PLATFORM_JVMTISUPPORTED -platform.nativeLibsLinkage $PLATFORM_NATIVELIBSLINKAGE

可知,其运行的代码为

java -agentlib:jckjvmti=brkp00102 javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102.brkp00102 -platform.jvmtiSupported true -platform.nativeLibsLinkage dynamic

其中 -platform.jvmtiSupported true和-platform.nativeLibsLinkage dynamic可通过GUI界面得到,也可通过分析代码得到

但是运行不会成功,因为-agentlib参数找不到libjckjvmti.so,此时需要使用下面的命令将路径导入

export LD_LIBRARY_PATH=libjckjvmti.so所在的路径:$LD_LIBRARY_PATH

以我本机为例

export LD_LIBRARY_PATH=/home/firewood/src/java/brkp00102/out/production/brkp00102/javasoft/sqe/tests/vm/jvmti/brkp001/brkp00102:$LD_LIBRARY_PATH

再运行

java -agentlib:jckjvmti=brkp00102 javasoft.sqe.tests.vm.jvmti.brkp001.brkp00102.brkp00102 -platform.jvmtiSupported true -platform.nativeLibsLinkage dynamic

查看运行结果

echo $?
95

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:01:43  更:2021-07-28 08:03:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:20:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码