当源文件位于我的根目录的相对位置时,我正在尝试从 gcovr 获取正确的 html 输出。
例如(我会提到 gcovr 工作的两个案例,以及它有问题的地方):
CASE: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
知道我做错了什么吗?
最佳答案
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 的 future 版本中改变,因此请尽量避免使用包含反斜杠作为路径分隔符的过滤器。
更新:从 gcovr 版本 4 开始,所有过滤器都必须使用正斜杠作为路径分隔符,即使在 Windows 上也是如此。参见 Using Filters in the Gcovr User Guide了解详情。
关于html - 当源文件位于其他目录中时,gcovr 不会创建详细报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145419/