Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html gcovr不';当源文件位于其他目录的相对位置时,无法创建详细报告_Html_Relative Path_Gcov_Cpputest_Gcovr - Fatal编程技术网

Html gcovr不';当源文件位于其他目录的相对位置时,无法创建详细报告

Html gcovr不';当源文件位于其他目录的相对位置时,无法创建详细报告,html,relative-path,gcov,cpputest,gcovr,Html,Relative Path,Gcov,Cpputest,Gcovr,当源文件位于根目录的相对位置时,我试图从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 ../

当源文件位于根目录的相对位置时,我试图从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
../../../Common/Source/myfile.c 
obj/Common/Source/myfile.o,     myfile.gcda,myfile.gcno,^#^#^#Common#Source#gcovmyfile.gcov
gcovr_reports/report.html, report.C
所以一切都很好,我有html通用报告(report.html)和详细报告(report_myfile.html)

情况:2-gcovr工作不正常 在使用--html--html详细信息从根目录运行gcovr之后,我的根目录的结构如下所示

现在您可以看到,gcovr在gcovr_report/目录中生成“report.C”文件

此外,还会创建带有摘要的通用html报告(report.html),但不会创建源文件“myfile.c”的详细报告。 当我查看obj目录时,它会创建以下文件(如下所示):

当我看到

^#^#^#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
s。您可以定义多个过滤器,任何一个都必须匹配。要完全禁用筛选器,请使用空筛选器
--filter”“

筛选器是与绝对源文件路径匹配的正则表达式

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

--filter Project\\UnitTests\\myModule\\module1\\
--filter Common\\Source\\
这将在未来版本的gcovr中更改,因此请尽量避免使用包含反斜杠作为路径分隔符的过滤器

更新:自gcovr第4版以来,所有筛选器必须对路径分隔符使用前斜杠,即使在Windows上也是如此。有关详细信息,请参阅

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