Lcov: 无法收集分支覆盖率统计数据。

26

我在项目中使用lcov创建覆盖率信息。但我只能获得行覆盖率和函数覆盖率统计信息。

lcov version:1.10, gcov version:4.4.5

我使用的命令是:

 lcov -d $OSPL_HOME/src -d $OSPL_OUTER_HOME/src  -c -o /work/li/log/lcov-raw.info

lcov -r /work/li/log/lcov-raw.info "*.ll" "*.yy" "*.yy.c" yaccpar "TAO161*" "/usr/include/*"  "*/testsuite/*" -o /work/li/log/lcov.info

执行这两个命令后,我得到的结果是:

Deleted 23 files

Writing data to /work/li/log/lcov.info

Summary coverage rate:

  lines......: 45.4% (65087 of 143496 lines)

   functions..: 46.1% (5575 of 12102 functions)

  **branches...: no data found**

所以没有分支覆盖率的结果。为什么?发生了什么?这是怎么回事?我很困惑。

在第一个命令之后,我收到了很多这样的警告:

geninfo: WARNING: cannot find an entry for ..#..#code#accum.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#at.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#autodef.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#copyof.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#debug.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#define.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#dump.c.gcov in .gcno file,skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#error.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#expand.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#expr.c.gcov in .gcno file,skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#if.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#include.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#io.c.gcov in .gcno file, s kipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#is.c.gcov in .gcno file, s kipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#line.c.gcov in .gcno file,skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#pragma.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#preprocess.c.gcov in .gcnofile, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#set.c.gcov in .gcno file,skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#sharp.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#symtbl.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#undef.c.gcov in .gcno file, skipping file!
 geninfo: WARNING: cannot find an entry for ..#..#code#while.c.gcov in .gcno file , skipping file!

2
请将答案添加为您自己的问题的答案。我发现它非常有帮助。 - nwellnhof
我已经在下面添加了一个社区维基答案。如果作者回到这个问题,他/她可以添加自己的答案并享受奖励。 - Duncan Jones
可能是为lcov生成分支覆盖数据的重复问题。 - Hcorg
2个回答

34

我收到了geninfo作者Peter Oberparleiter的邮件,并得到了以下答案。

LCOV 1.10默认禁用分支覆盖率。您可以通过修改lcovrc文件(请参见man lcovrc)或在运行lcov/genhtml时指定--rc lcov_branch_coverage=1来启用它。

如果您没有使用LCOV 1.10并且仍然无法获得分支覆盖率,可能是因为您的GCC版本不提供此信息。

上述答案是由作者错误地添加到问题中的。


13

上面给出的解决方案:

--rc lcov_branch_coverage=1

用于lcov和genhtml,对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接