【问题标题】:How to remove certain directories from lcov code coverage report?如何从 lcov 代码覆盖率报告中删除某些目录?
【发布时间】:2016-11-21 03:35:25
【问题描述】:

我不太擅长使用 lcov 和 shell 脚本,所以这对我来说是一个学习过程。我了解制作代码覆盖率报告的基础知识,但我不知道排除某些目录的代码行。在一个 shell 可执行文件中,我编写了以下代码:

    #!/bin/sh
    ROOT_DIR=$1
    DEST_DIR=$2
    TARGET_DIR=$3
    TARGET=$4

   #init lcov
   lcov -c -i -d $TARGET_DIR/.. -o $TARGET_DIR/cov_init.info

    #run unit test executable
    "$DEST_DIR/$TARGET"

     #capture coverage after running executable
     lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info

     #I added this in-generate delta of coverage
     lcov -a $TARGET_DIR/cov_init.info -a $TARGET_DIR/cov_test.info -o $TARGET_DIR/cov.info

  # I added this in- Excludes some third party code
                    lcov --remove $TARGET_DIR/cov.info '/opt/*' '/usr/*' '$ROOT_DIR/Common?ExternalLibraries/*'

  #I added this in-generate report
            genhtml $TARGET_DIR/cov.info --ignore-errors source --output-directory $DEST_DIR/CoverageReport/$TARGET
            xdg-open $DEST_DIR/CoverageReport/$TARGET/index.html &

我很确定我需要在运行可执行文件后捕获覆盖范围之前排除目录。

【问题讨论】:

标签: bash shell lcov


【解决方案1】:

lcov 有一个选项 --remove 可以忽略指定文件的覆盖率数据。

--remove tracefile pattern

tracefile 中删除数据。

如果您想删除参数的覆盖率数据,请使用此开关 来自tracefile 的特定文件集。附加命令行 参数将被解释为 shell 通配符模式(注意 他们可能需要相应地逃脱以防止 壳首先扩展它们)。 tracefile 中的每个文件条目 至少匹配其中一种模式的将被删除。

删除操作的结果将被写入标准输出或 用-o 指定的tracefile

-z-c-a-e-r-l--diff--summary 只能是其中之一 一次指定。

您可以执行以下操作;引用下面的超链接

lcov --remove /tmp/libreoffice_total.info -o /tmp/libreoffice_filtered.info \
    '/usr/include/*' \
    '/usr/lib/*' \
    '/usr/local/src/libreoffice/*/UnpackedTarball/*' \
    '/usr/local/src/libreoffice/workdir/*' \
    '/usr/local/src/libreoffice/instdir/*' \
    '/usr/local/src/libreoffice/external/*' \

有关更多文档,请参阅this page

【讨论】:

  • 这可能是一个愚蠢的问题,但你怎么会有单引号 '/usr/mydirToExclude/*' 以及它与代码 /tmp/mylibfiletoExclude.info 有什么关系?
  • 实例参考嵌入链接!
  • @I_love_coding_93:您可以根据需要使用该选项吗?
  • 您是否通过此链接,wiki.documentfoundation.org/Development/…,如果我理解正确,从代码覆盖率报告中删除目录就是您想要的
  • @I_love_coding_93,只需将您和@Inian 代码放在一起:lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info && lcov --remove $TARGET_DIR/cov_test.info '/usr/include/*' -o $TARGET_DIR/cov_test_filtered.info
猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 2013-08-14
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2010-11-04
  • 2010-10-24
相关资源
最近更新 更多