2

当源文件位于我的根目录的相对位置时,我正在尝试从 gcovr 获取正确的 html 输出。

例如(我会提到 gcovr 工作的两种情况,以及它有问题的地方):

案例:1 - gcovr 工作没有问题 我的根目录的结构如下,在我使用 --html --html-details 从根目录运行 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-details 从根目录运行 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),但不是我的源文件 "myfile.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

知道我做错了什么吗?

4

1 回答 1

1

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

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

该文件不在项目中,因此被排除在外。这通常是您想要的,因为您使用的任何库的覆盖范围往往是无关紧要的。

当这是错误的,你可以接管过滤并定义你自己--filter的 s. 您可以定义多个过滤器,并且任何一个都必须匹配。要完全禁用过滤器,请使用空过滤器--filter ""

过滤器是与绝对源文件路径匹配的正则表达式。

不幸的是,Windows 的过滤器目前已损坏。不可能编写匹配多个目录的过滤器,除非您的工作目录是所有目标目录的父目录。例如,您可以转到C:\并使用以下过滤器:

--filter Project\\UnitTests\\myModule\\module1\\
--filter Common\\Source\\

这将在 gcovr 的未来版本中更改,因此请尽量避免包含反斜杠作为路径分隔符的过滤器。

更新:从 gcovr 版本 4 开始,所有过滤器都必须使用正斜杠作为路径分隔符,即使在 Windows 上也是如此。有关详细信息,请参阅Gcovr 用户指南中的使用过滤器

于 2018-04-11T18:11:45.010 回答