如何解决执行一条Java命令后,如何获得Hotspot的代码覆盖率?
我想在OpenJDK中获得Hotspot JVM的代码覆盖,所以我准备如下:
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构建。
-
我注意到在OpenJDK中我只需要覆盖代码的某些部分。因此,我将
.gcno
个文件保留在目录hotspot/variant-server/libjvm/objs
中,并删除了其他目录中的.gcno
个文件。 -
最后,我在运行诸如
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
我的问题在这里:
- 我构建OpenJDK的方法对吗?我想使用
gcov
和lcov
收集代码覆盖率。 - 我的过滤
.gcno
文件的方法正确吗?就是说,仅删除.gcno
文件就可以了吗? - 我的方法是在运行Java命令之前和之后捕获代码覆盖率的方法吗?我有一个警告
lcov: WARNING: negative counts found in tracefile test.info
,但我不知道这有没有关系。
感谢您的回答!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。