使用 gcvor 覆盖其他目录中的文件
Get coverage for files in other directories with gcvor
我遇到了问题,没有在 gcovr 输出中获取 cpp 文件。实际上我的主项目包含许多子 cpp 文件,但是它们位于不同的目录路径中。
目录布局:
D:\selv_ar\GCovTest\ado\cic\rc_actuator_switch\ulf\src
(源目录)
test\devices\puu_driver\sw
(主项目目录)
core\devices\puu_driver
(子文件)
test\testtools
(子文件)
test\devices\puu_driver
(工作区)
我有一个简单的 hello world 程序,文件 main.cpp
、helloworld.h
和 helloworld.cpp
位于同一目录中。
备注:
- 我正在编译到嵌入式目标
debgcov_qnx660_qcc_x86
并将 gcda 文件复制到与源文件相同的目录中。
- 我是主项目目录中的 运行ning gcovr。
问题:
当我为 hello world 程序创建覆盖率报告时,为什么它不显示 helloworld.h
文件?
当我为实际软件创建覆盖率报告时,它会显示主项目目录中文件的覆盖率。为什么它不显示子文件的覆盖范围?
我应该从哪个目录 运行 gcvor?主目录?源码目录?工作区?
我应该把 gcda 文件放在哪里?进入主项目目录?进入子文件目录?
When I create a coverage report for the hello world program, why doesn't it show the helloworld.h file?
Gcovr 仅报告包含可执行代码的文件。头文件通常只包含声明,而不包含函数定义。您可以检查 运行ning gcovr 在 `--verbose`` 模式下是否看到该文件。
一些 GCC 版本有一个错误,因此不会报告零覆盖率的文件,即使它们包含可执行代码。有关修复此问题的编译器版本,请参阅 the gcvor FAQ[1]。
[1]: 抱歉,主要 gcovr.com 网站目前已关闭。
When I create a coverage report for my actual software, it shows coverage for files in the main project directory. Why doesn't it show coverage for the sub files?
Gcovr 会尝试过滤掉与您的项目无关的覆盖率数据,例如标准库的覆盖率数据。
- Gcovr 仅在文件路径与
-f
/--filter
. 匹配时保留覆盖率数据
- 如果没有给出过滤器,路径必须在
-r
/--root
目录中。
- 如果没有明确提供
--root
,则使用当前工作目录。
因此,当您 运行 gcovr 没有像 --filter
或 --root
这样的参数时,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的开发版本)。
From which directory should I run gcvor? The main directory? The source directory? The workspace?
在可能的情况下,gcovr 应该 运行 在与 GCC 运行s 相同的目录中。这通常意味着您的构建目录。如果 GCC 运行s 在多个目录中,请尝试使用所有这些目录的父目录。使用 --root
、--filter
和搜索路径参数为源代码和 gcda 文件提供合适的路径。
Where should I put the gcda files? Into the main project directory? Into the sub file directories?
.gcda
文件必须放在编译器生成的相应 .o
目标文件和 .gcno
文件旁边。这很重要,这样才能找到正确的源文件。
如果您使用交叉编译,收集有效的覆盖率数据可能会更加复杂。如果您遇到问题,请阅读 “Cross-Profiling” chapter of the GCC docs and gcovr issue #259.
中的 GCOV_PREFIX
Gcovr 在搜索路径中搜索 gcda 文件:您传递给 gcovr 的任何(未命名)参数。例如,gcovr --root foo bar qux
指定两个搜索路径 bar
和 qux
。默认情况下,gcovr 搜索当前工作目录的所有子目录。
我遇到了问题,没有在 gcovr 输出中获取 cpp 文件。实际上我的主项目包含许多子 cpp 文件,但是它们位于不同的目录路径中。
目录布局:
D:\selv_ar\GCovTest\ado\cic\rc_actuator_switch\ulf\src
(源目录)test\devices\puu_driver\sw
(主项目目录)core\devices\puu_driver
(子文件)test\testtools
(子文件)test\devices\puu_driver
(工作区)
我有一个简单的 hello world 程序,文件 main.cpp
、helloworld.h
和 helloworld.cpp
位于同一目录中。
备注:
- 我正在编译到嵌入式目标
debgcov_qnx660_qcc_x86
并将 gcda 文件复制到与源文件相同的目录中。 - 我是主项目目录中的 运行ning gcovr。
问题:
当我为 hello world 程序创建覆盖率报告时,为什么它不显示
helloworld.h
文件?当我为实际软件创建覆盖率报告时,它会显示主项目目录中文件的覆盖率。为什么它不显示子文件的覆盖范围?
我应该从哪个目录 运行 gcvor?主目录?源码目录?工作区?
我应该把 gcda 文件放在哪里?进入主项目目录?进入子文件目录?
When I create a coverage report for the hello world program, why doesn't it show the helloworld.h file?
Gcovr 仅报告包含可执行代码的文件。头文件通常只包含声明,而不包含函数定义。您可以检查 运行ning gcovr 在 `--verbose`` 模式下是否看到该文件。
一些 GCC 版本有一个错误,因此不会报告零覆盖率的文件,即使它们包含可执行代码。有关修复此问题的编译器版本,请参阅 the gcvor FAQ[1]。
[1]: 抱歉,主要 gcovr.com 网站目前已关闭。
When I create a coverage report for my actual software, it shows coverage for files in the main project directory. Why doesn't it show coverage for the sub files?
Gcovr 会尝试过滤掉与您的项目无关的覆盖率数据,例如标准库的覆盖率数据。
- Gcovr 仅在文件路径与
-f
/--filter
. 匹配时保留覆盖率数据
- 如果没有给出过滤器,路径必须在
-r
/--root
目录中。 - 如果没有明确提供
--root
,则使用当前工作目录。
因此,当您 运行 gcovr 没有像 --filter
或 --root
这样的参数时,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的开发版本)。
From which directory should I run gcvor? The main directory? The source directory? The workspace?
在可能的情况下,gcovr 应该 运行 在与 GCC 运行s 相同的目录中。这通常意味着您的构建目录。如果 GCC 运行s 在多个目录中,请尝试使用所有这些目录的父目录。使用 --root
、--filter
和搜索路径参数为源代码和 gcda 文件提供合适的路径。
Where should I put the gcda files? Into the main project directory? Into the sub file directories?
.gcda
文件必须放在编译器生成的相应 .o
目标文件和 .gcno
文件旁边。这很重要,这样才能找到正确的源文件。
如果您使用交叉编译,收集有效的覆盖率数据可能会更加复杂。如果您遇到问题,请阅读 “Cross-Profiling” chapter of the GCC docs and gcovr issue #259.
中的 GCOV_PREFIXGcovr 在搜索路径中搜索 gcda 文件:您传递给 gcovr 的任何(未命名)参数。例如,gcovr --root foo bar qux
指定两个搜索路径 bar
和 qux
。默认情况下,gcovr 搜索当前工作目录的所有子目录。