如何忽略gcov输出中的头文件?

问题描述 投票:2回答:2

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

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

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

有人有想法吗?

谢谢 !!

c++ continuous-integration code-coverage gcov gcovr
2个回答
2
投票

我也在努力解决这个问题,现在找到了正确的解决方案。这里有一个例子和工作方式:

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

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

https://regex101.com/

现在,它说:REGULAR EXPRESSION,创建一个正则表达式,使整个文件名为蓝色。确保此表达式不适用于需要在coverage报告中显示的其他文件。

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

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

玩得开心!


1
投票

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

你的命令看起来像

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

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

© www.soinside.com 2019 - 2024. All rights reserved.