当我为 hello world 程序创建覆盖率报告时,为什么它不显示 helloworld.h 文件?
Gcovr 仅在文件包含可执行代码时才报告该文件。头文件通常只包含声明,而不包含函数定义。您可以通过在 --verbose 模式下运行 gcovr 来检查该文件是否被看到。
一些 GCC 版本有一个错误,因此即使它们包含可执行代码,也不会报告覆盖率为零的文件。有关修复此问题的编译器版本,请参阅gcvor FAQ [1]。
[1]:抱歉,gcovr.com 主网站目前已关闭。
当我为我的实际软件创建覆盖率报告时,它会显示主项目目录中文件的覆盖率。为什么它不显示子文件的覆盖范围?
Gcovr 尝试过滤掉与您的项目无关的覆盖率数据,例如标准库的覆盖率数据。
-f
如果文件路径与/匹配,Gcovr 仅保留覆盖率数据--filter
。
- 如果没有给出过滤器,则路径必须在
-r
/--root
目录中。
- 如果没有
--root
明确提供,则使用当前工作目录。
因此,当您运行不带--filter
or之类的参数--root
的 gcovr 时,gcovr 将仅显示当前工作目录中文件的覆盖范围。
要解决此问题,请提供一个根路径,其中包含您想要覆盖的所有目录,例如--root ../
或--root D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src
。
或者,您可以提供与您感兴趣的所有文件匹配的过滤器。请注意,过滤器是正则表达式,因此您需要转义特殊字符,例如.
. 此外,对正则表达式中的路径使用正斜杠。shell 语法示例:
$ gcovr --root . \
-f 'D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src/(test|core)/devices/puu_driver/' \
-f 'D:/selv_ar/GCovTest/ado/cicrc_actuator_switch/ulf/src/test/testtools/'
确保您使用的是 gcovr 版本 4 或更高版本,以便过滤器在 Windows 上正常工作。如果要使用--root ../
样式路径,则应使用 gcovr 4.2(尚未发布,同时从 GitHub 安装开发版本)。
我应该从哪个目录运行 gcvor?主目录?源码目录?工作区?
在可能的情况下,gcovr 应该在运行 GCC 的同一目录中运行。这通常意味着您的构建目录。如果 GCC 在多个目录中运行,请尝试使用所有这些目录的父目录。使用--root
、--filter
和 search path 参数为源代码和 gcda 文件提供合适的路径。
我应该把 gcda 文件放在哪里?进入主项目目录?进入子文件目录?
这些.gcda
文件必须放在编译器生成的相应.o
目标文件和文件旁边。.gcno
这很重要,这样才能找到正确的源文件。
如果您使用交叉编译,则收集有效的覆盖数据可能会更加复杂。如果您遇到问题,请阅读 GCC 文档的“Cross-Profiling”一章中的GCOV_PREFIX和gcovr 问题 #259。
Gcovr 在搜索路径中搜索 gcda 文件:您传递给 gcovr 的任何(未命名)参数。例如,gcovr --root foo bar qux
指定两个搜索路径bar
和qux
. 默认情况下,gcovr 搜索当前工作目录的所有子目录。