【问题标题】:How to ignore header files in gcov output?如何忽略 gcov 输出中的头文件?
【发布时间】:2015-03-17 12:03:00
【问题描述】:

我正在使用 gcov 和 gcovr 来生成我的代码测试覆盖率(测试是使用 google test++ 完成的)。 因此,我使用 -ftest-coverage -fprofile-arcs 选项进行编译,然后运行 ​​gcovr(它本身运行 gcov)。 但是,在我的输出中,我有覆盖率为 100% 的 cpp 文件,还有 .h 文件,即使它们没有可执行代码,因此它们的覆盖率为 0%。

这个 0% 没有任何意义,因此,我想从覆盖输出中删除 .h 文件。我找不到任何关于它的...

我已经尝试将 : -e "*.h" 添加到 govr 选项中,以排除扩展名为 .h 的文件,但它不起作用(它实际上排除了所有内容......)。

有人有想法吗??

谢谢!!

【问题讨论】:

  • 我认为您使用的正则表达式不正确。试试 `--exclude='.*\.h' 吧?

标签: c++ continuous-integration code-coverage gcov gcovr


【解决方案1】:

我也在为此苦苦挣扎,现在找到了正确的解决方案。这是一个示例和工作方式:

运行 gcov 时,使用选项-o coverage.xml,然后打开文件。找到要排除的文件名并复制文件名。

在浏览器中打开以下链接并将整个文件名复制到显示:TEST STRING 的部分

https://regex101.com/

现在,它说:正则表达式,创建一个正则表达式,使整个文件名 BLUE。确保此表达式不适用于需要在您的覆盖率报告中显示的其他文件。

这里有一些基本规则:通常,对于“某些字符”,您可以使用".*" 与 *.cpp 类型的文件无关,您想在其中查看 cpp 文件!所以如果你想排除像"<some characters>include<more characters>"这样的东西,那么你可以使用".*include.*"。这也将排除一些文件名,如 include.cpp

因为.在正则表达式中有含义,所以使用\.所以如果要排除"<something>.h"文件,使用".*\.h" 对我有用的示例:(排除包含文件和测试框架以及 linux 包含目录并排除 jenkins 文件)

我还想排除任何带有 test 字样的 cpp 文件,我可以用 ".*test[_-[A-Z|a-z]*\.cpp" 做什么

现实生活中的例子:

gcovr --xml -e ".*unit_test\.cpp" -e ".*\.h" -e ".*usr/include/.*" -e ".*jenkins.*" -e ".*test[_-|A-Z|a-z]*\.cpp" -o coverage.xml

玩得开心!

【讨论】:

    【解决方案2】:

    只需使用 -e 排除您的文件..

    你的命令看起来像

    gcovr -r . -e "include.*" --html --html-details -o $result_dir/result.html
    

    它将排除您项目的所有包含文件。

    【讨论】:

    • 不适合我,也许 ".*include.*" 效果更好......或者它是另一种编程语言?
    • 可能有用的是提及文件是相对于当前目录的,而不是根目录,如果它们不同的话。还可以使用多个 -e 标志来排除多组文件。
    猜你喜欢
    • 2016-09-18
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2020-04-04
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多