当源文件相对于根目录时,我试图从gcovr获得正确的html输出。
例如(我将提到gcovr工作的两种情况,以及它存在问题的情况):
案例:1-gcovr工作正常
在使用--html--html详细信息从根目录运行gcovr之后,根目录的结构如下

source/myfile.c
obj/myfile.o, myfile.gcda, myfile.gcno, myfile.c.gcov
gcovr_reports/report.html, report_myfile.html

所以一切都很好,我有html通用报告(report.html)和详细报告(report_myfile.html)。
案例:2-gcovr工作不正常
在使用--html--html详细信息从根目录运行gcovr之后,根目录的结构如下所示
../../../Common/Source/myfile.c
obj/Common/Source/myfile.o,     myfile.gcda,myfile.gcno,^#^#^#Common#Source#gcovmyfile.gcov
gcovr_reports/report.html, report.C

现在您可以看到,gcovr在gcovr_report/目录中生成“report.C”文件
此外,还创建了带有摘要的常规html报表(report.html),但没有创建我的源文件“my file.c”的详细报表。
当我查看obj目录时,它会创建以下文件(如下所示):
^#^#^#Project#Common#Source#myfile.c.gcov

当我调查的时候
^#^#^#Project#Common#Source#myfile.c.gcov,

路径解析如下:
Source:../../../Project/Common/Source/myfile.c

但应该是:
Source:../../../../../../../Project/Common/Source/myfile.c

gcovr命令是:
C:\Python34\Scripts\gcovr -v -b -r C:\Project\UnitTests\myModule\module1 --    object-directory C:\Project\UTests\myModule\module1\test-obj\Common\Source --     html --html-details -o govr_report\report.html

知道我做错了什么吗?

最佳答案

Gcovr过滤覆盖率数据以仅显示项目中的文件,这由-r根或任何--filters决定。

Project: C:\Project\UnitTests\myModule\module1
File:    ..\..\..\Common\Source\myfile.c

该文件不在项目中,因此被排除在外。这通常是您想要的,因为您使用的任何库的覆盖率往往都是无关紧要的。
如果这是错误的,您可以接管筛选并定义自己的--filters。您可以定义多个筛选器,任何一个都必须匹配。要完全禁用过滤器,请使用空过滤器--filter ""
过滤器是与绝对源文件路径匹配的正则表达式。
不幸的是,Windows的过滤器当前已损坏。无法编写与多个目录匹配的筛选器,除非工作目录是所有目标目录的父目录。例如,可以转到C:\并使用以下筛选器:
--filter Project\\UnitTests\\myModule\\module1\\
--filter Common\\Source\\

这将在gcovr的未来版本中更改,因此请尽量避免使用包含反斜杠作为路径分隔符的筛选器。
更新:由于gcovr版本4,所有过滤器都必须对路径分隔符使用正斜杠,即使在Windows上也是如此。详见Using Filters in the Gcovr User Guide

10-07 17:23