lcov删除选项未按预期删除覆盖率数据

时间:2018-09-26 07:58:47

标签: code-coverage lcov

我正在使用lcov生成覆盖率报告。我有一个跟踪文件(broker.info),其中包含以下内容(显示了相关片段):

$ lcov -r broker.info
...
[/var/lib/jenkins/jobs/ContextBroker-PreBuild-UnitTest/workspace/test/unittests/orionTypes/]
EntityTypeResponse_test.cpp                    | 100%    11| 100%   6|    -    0
...

[/var/lib/jenkins/jobs/ContextBroker-PreBuild-UnitTest/workspace/test/unittests/parse/]
CompoundValueNode_test.cpp                     | 100%    82| 100%  18|    -    0
...

[/var/lib/jenkins/jobs/ContextBroker-PreBuild-UnitTest/workspace/test/unittests/rest/]
OrionError_test.cpp                            |92.1%    38| 100%   6|    -    0
...

[/var/lib/jenkins/jobs/ContextBroker-PreBuild-UnitTest/workspace/test/unittests/serviceRoutines/]
badVerbAllFour_test.cpp                        | 100%    24| 100%   7|    -    0
...

我想删除与test/unittest文件相对应的所有信息。

根据手册页,我尝试使用-r选项,

  

-r跟踪文件模式     -删除跟踪文件模式            从跟踪文件中删除数据。

     

如果要从跟踪文件中删除特定文件集的coverage数据,请使用此开关。其他命令行参数将被解释为     shell通配符模式(请注意,可能需要对其进行相应的转义,以防止Shell首先扩展它们)。跟踪文件中的每个文件条目     至少匹配其中一种模式的内容将被删除。

     

删除操作的结果将被写入stdout或-o指定的跟踪文件。

     

一次只能指定-z,-c,-a,-e,-r,-l,-diff或--summary中的一个。

因此,我正在使用

$ lcov -r broker.info 'test/unittests/*' -o broker.info2

据我了解,test/unittest/*test/unittest下的文件匹配。但是,它不起作用(请注意下面的Deleted 0 files):

Reading tracefile broker.info
Deleted 0 files
Writing data to broker.info2
Summary coverage rate:
  lines......: 92.6% (58313 of 62978 lines)
  functions..: 96.0% (6451 of 6718 functions)
  branches...: no data found

我也尝试了这种变体(结果相同):

$ lcov -r broker.info "test/unittests/*" -o broker.info2
$ lcov -r broker.info "test/unittests/\*" -o broker.info2
$ lcov -r broker.info "test/unittests" -o broker.info2

那么,也许我做错了什么?

我正在使用lcov版本1.13(以防万一数据相关)

谢谢!

2 个答案:

答案 0 :(得分:1)

即使使用通配符(lcov 1.14),下面提到的lcov命令也可以正常工作:

lcov --remove meson-logs/coverage.info '/home/builduser/external/*' '/home/builduser/unittest/*' -o meson-logs/sourcecoverage.info

答案 1 :(得分:0)

我一直在测试另一个选项,以下选项似乎也可以使用,在前缀中也使用通配符:

$ lcov -r broker.info "*/test/unittests/*" -o broker.info2

也许是1.13版中的新内容,因为在1.11版中,它似乎可以在前缀中没有通配符的情况下使用...