执行一条Java命令后,如何获得Hotspot的代码覆盖率?

问题描述

我想在OpenJDK中获得Hotspot JVM的代码覆盖,所以我准备如下:

  1. 按照openjdk所述步骤建立一个here
bash configure --with-boot-jdk=$my_path_to_boot_jdk1 --enable-native-coverage --disable-warnings-as-errors
make images

make之后,我检查了./build/*/images/jdk/bin/java -version是否有效,因此我完成了代码覆盖范围的OpenJDK构建。

  1. 我注意到在OpenJDK中我只需要覆盖代码的某些部分。因此,我将.gcno个文件保留在目录hotspot/variant-server/libjvm/objs中,并删除了其他目录中的.gcno个文件。

  2. 最后,我在运行诸如lcov之类的Java命令之前和之后都使用java -version进行了覆盖。

#!/bin/zsh
# set some variables
projectDir='hotspot-openjdk-jdk11/'
srcDir="$projectDir"'src/'
javaApp="$projectDir"'build/linux-x86_64-normal-server-release/images/jdk/bin/java'

# a) Resetting counters
lcov -z -d "$projectDir"

# b) create baseline coverage data file
lcov -c -i -d "$projectDir" -b "$srcDir" -o base.info --ignore-errors graph 

# run app in the jdk,such as `java -version`
$javaApp -version

# c) Capturing the current coverage state to a file
lcov -c -d "$projectDir" -b "$srcDir" -o test.info --ignore-errors graph

# d) combine baseline and test coverage data
lcov -a base.info -a test.info -o coverage.info

我的问题在这里:

  1. 我构建OpenJDK的方法对吗?我想使用gcovlcov收集代码覆盖率。
  2. 我的过滤.gcno文件的方法正确吗?就是说,仅删除.gcno文件就可以了吗?
  3. 我的方法是在运行Java命令之前和之后捕获代码覆盖率的方法吗?我有一个警告lcov: WARNING: negative counts found in tracefile test.info,但我不知道这有没有关系。

感谢您的回答!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...