当源文件相对于我的根目录时,我正试图从gcovr获取正确的html输出。
例如(我将提到gcovr工作的两种情况,以及存在问题的地方):
案例:1 - gcovr正常运行 从root运行gcovr后,我的根目录结构如下:--html --html-details
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无法正常工作 从root运行gcovr后,我的根目录结构如下: - html --html-details)
../../../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
知道我做错了吗?
答案 0 :(得分:1)
Gcovr会根据-r
根或--filter
确定的范围过滤覆盖数据,仅显示项目中的文件。
Project: C:\Project\UnitTests\myModule\module1
File: ..\..\..\Common\Source\myfile.c
该文件不在项目中,因此将其排除。这通常是您想要的,因为您使用的任何库的覆盖范围往往是无关紧要的。
如果这是错误的,您可以接管过滤并定义自己的--filter
。您可以定义多个过滤器,任何一个必须匹配。要完全禁用过滤器,请使用空过滤器--filter ""
。
过滤器是与绝对源文件路径匹配的正则表达式。
不幸的是,Windows的过滤器目前已被破坏。除非您的工作目录是所有目标目录的父目录,否则无法编写与多个目录匹配的过滤器。例如,您可以转到C:\
并使用以下过滤器:
--filter Project\\UnitTests\\myModule\\module1\\
--filter Common\\Source\\
这将在gcovr的未来版本中更改,因此请尽量避免使用包含反斜杠的过滤器作为路径分隔符。
更新:从gcovr版本4开始,所有过滤器都必须使用正斜杠作为路径分隔符,即使在Windows上也是如此。有关详细信息,请参阅Using Filters in the Gcovr User Guide。