首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为lcov生成分支覆盖数据

为lcov生成分支覆盖数据
EN

Stack Overflow用户
提问于 2012-09-10 22:12:29
回答 4查看 21.3K关注 0票数 23

我试图使用lcov作为代码覆盖率度量标准,但我无法让分支覆盖率正常工作。

下面是我使用它的方式:

代码语言:javascript
复制
g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test 
lcov --zerocounters --directory $PWD 
lcov --capture --initial --directory $PWD --output-file coverage_output  
./bin/test 
lcov --no-checksum --directory $PWD --capture --output-file coverage_output 
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output

但我明白:

总覆盖率: 线.:100.0% (60 / 60行) 职能: 100.0% (26个职能中的26个) 没有发现任何数据

有什么想法吗?

EN

回答 4

Stack Overflow用户

发布于 2013-01-25 14:14:50

默认情况下,LCOV的最新版本禁用分支覆盖。

您需要通过以下两种方法重新启用它:

  • 编辑~/.lcovrc文件(从/etc/lcovrc复制)将lcov_branch_coverage设置更改为1
  • --rc lcov_branch_coverage=1添加到lcov命令行
票数 38
EN

Stack Overflow用户

发布于 2014-07-30 07:08:39

.lcovrc文件是需要放置在lcov文件路径中的设置文件。坦白地说,我对这个文件的使用没有太多的研究。

您需要为所有调用lcov_branch_coverage=1向lcov 添加额外的参数"--rc “。在您的示例中,将此参数添加到所有三个调用中。如果你错过了一个,它就会降低分支机构的覆盖范围。

还需要对genhtml进行分支覆盖。

票数 14
EN

Stack Overflow用户

发布于 2012-09-11 14:54:21

对不起,与其说是“想法”,不如说是确认你做的一切都是正确的。您的确切命令适用于以下简单代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

bool foo(int i)
{
    if (i != 0) {
        return 12 / i;
    } else {
        return 0;
    }
}

int main(int argc, char** argv)
{
    cout << foo(argc) << endl;
    return 0;
}

lcov覆盖表包含行、函数和分支的统计信息。也许你会再次检查你是否看到了正确的HTML输出?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12360167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档