当源文件相对于根目录时,我试图从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
根或任何--filter
s决定。
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上也是如此。详见Using Filters in the Gcovr User Guide。