gcovr不显示头文件库中未被使用头文件的0%覆盖率如何解决
头文件库覆盖率缺失未引用头文件问题解决方案
GCC 覆盖率采集机制默认仅处理被编译单元实际引用的头文件,未被引入的头文件不会生成任何覆盖率打点数据,因此 gcovr 默认不会将这类文件纳入覆盖率报告。
要让未被引用的头文件显示0%覆盖率,可按以下方案操作:
方案1:使用gcovr内置参数(推荐,要求gcovr版本≥4.2)
执行gcovr命令时新增--keep-unused-files参数,同时用--filter明确指定需要统计的include目录,命令示例如下:
# 执行路径仍为test目录下 gcovr -r .. --filter include/ --keep-unused-files
参数说明:
-r ..指定项目根目录为test目录的上层目录,确保路径识别正确--filter include/限定统计范围为include目录下的所有源码文件--keep-unused-files要求gcovr将匹配filter规则但无任何覆盖率数据的文件也纳入报告,覆盖率显示为0%
方案2:低版本gcovr兼容方案
如果你的gcovr版本低于4.2,无--keep-unused-files参数,可通过以下兼容方案实现:
- 在test目录下新增
dummy.cpp文件,手动引入所有头文件,无需编写调用逻辑:
#include "header1.h" #include "header2.h" #include "header3.h"
- 编译测试程序时,将
dummy.cpp和test1.cpp一起用--coverage参数编译、链接,之后正常运行测试即可。此时所有头文件都会被编译器处理,即使无实际调用逻辑也会生成全0的覆盖率数据,gcovr可识别到所有头文件的覆盖率。
注意事项
编译时建议额外添加-fkeep-inline-functions参数,避免头文件中未被调用的内联函数被编译器完全优化,导致无法正常统计覆盖率。
内容的提问来源于stack exchange,提问作者Vaibhav Thakkar
相关产品推荐
相关产品推荐

