4

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

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

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

有人有想法吗?

谢谢 !!

4

2 回答 2

6

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

运行 gcov 时,使用 option -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

玩得开心!

于 2017-12-01T12:58:34.550 回答
3

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

你的命令看起来像

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

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

于 2016-02-10T07:19:52.037 回答