在执行一个java命令后,如何获得Hotspot的代码覆盖率?

在执行一个java命令后,如何获得Hotspot的代码覆盖率?,java,code-coverage,gcov,hotspot,lcov,Java,Code Coverage,Gcov,Hotspot,Lcov,我想在OpenJDK中获得Hotspot JVM的代码覆盖率,所以我准备如下: 按照前面提到的步骤构建一个 bash configure--with boot jdk=$my_path_to_boot_jdk1--enable native coverage--disable warning as errors 制作图像 在make之后,我检查了/build/*/images/jdk/bin/java-version是否有效,因此我完成了代码覆盖率的OpenJDK构建 我注意到我只需要Open

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

  • 按照前面提到的步骤构建一个
  • bash configure--with boot jdk=$my_path_to_boot_jdk1--enable native coverage--disable warning as errors
    制作图像
    
    make
    之后,我检查了
    /build/*/images/jdk/bin/java-version
    是否有效,因此我完成了代码覆盖率的OpenJDK构建

  • 我注意到我只需要OpenJDK中的部分代码覆盖率。所以我保留了dir
    hotspot/variant server/libjvm/objs中的
    .gcno
    文件,并删除了其他dir中的
    .gcno
    文件

  • 最后,我使用
    lcov
    在运行java命令之前和之后获得覆盖率,例如
    java-version

  • #/bin/zsh
    #设置一些变量
    projectDir='hotspot-openjdk-jdk11/'
    srcDir=“$projectDir”'src/'
    javaApp=“$projectDir”'build/linux-x86_64-normal-server-release/images/jdk/bin/java'
    #a)重置计数器
    lcov-z-d“$projectDir”
    #b)创建基线覆盖率数据文件
    lcov-c-i-d“$projectDir”-b“$srcDir”-o base.info--忽略错误图
    #在jdk中运行应用程序,例如“java-version”`
    $javaApp-版本
    #c)将当前覆盖率状态捕获到文件
    lcov-c-d“$projectDir”-b“$srcDir”-o test.info--忽略错误图
    #d)结合基线和测试覆盖率数据
    lcov-a base.info-a test.info-o coverage.info
    
    我的问题是:

  • 我构建OpenJDK的方法正确吗?我想使用
    gcov
    lcov
    来收集代码覆盖率
  • 我过滤
    .gcno
    文件的方法正确吗?也就是说,简单地删除
    .gcno
    文件是否有效
  • 我在运行java命令前后捕获代码覆盖率的方法正确吗?我收到了一个警告,lcov:WARNING:tracefile test.info中发现了负计数,但我不知道这是否重要
  • 谢谢你的回答