使用gcov和lcov测试代码覆盖率

原创 2017年08月06日 19:41:42

原文地址

gcov与 lcov简介

通过gcov和lcov,可以很直观的看到代码的运行情况,同时也可以查看
代码的行覆盖率,函数覆盖率等等信息,为开发提供一个方便的测试手段。

gcov

gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就不需要再次安装了

lcov

lcov介绍

gcov能够生成代码覆盖信息,但是不够直观,因此需要借助lcov直观展示覆盖率,主要特点有:

基于Html输出,并生成一棵完整的HTML树
输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据
支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图

lcov安装

下载地址:lcov
下载完成后解压,执行命令:make install即可。

下面简单介绍linux下,使用gcov和locov进行代码覆盖率的测试。

测试

测试代码:

/***************************************************************
*   Copyright (C) 2017 All rights reserved.
*
*   文件名称:test.c
*   创 建 者:hyb
*   创建日期:2017年08月06日
*   描    述:
*
***************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int* twoSum(int* nums, int numsSize, int target) {
    int loop = 0;
    int inloop = 0;
    int* result = NULL;
    result =(int*) malloc(2*sizeof(int));
    memset(result,0,2*sizeof(int));
    printf("numsSize=%d\n",numsSize);
    if(NULL == nums || numsSize==0)
    {
        return result;
    }

    for(loop = 0;loop < numsSize;loop++)
    {
        for(inloop = loop+1;inloop <numsSize;inloop++)
        {
            if(*(nums+loop)+*(nums+inloop) == target)
            {
                if(NULL != result)
                {

                    *result = loop;
                    *(result+1) = inloop;
                }
                return result;
            }
        }
    }
    return result;
}

int main(int arg,char argv[])
{
    int nums[4]={2,7,11,15};
    int target = 9;
    int numsSize = 4;
    int* result = twoSum(nums,numsSize,target);
    printf("index1:%d\nindex2:%d\n",*result,*(result+1));
}

编译


gcc -fprofile-arcs -ftest-coverage test.c -o test

上面的参数-fprofile-arcs -ftest-coverage一定要带上,会生成gcno文件

运行

./test

生成了gcda文件

转换覆盖率信息

lcov -c -o test.info -d .

-c 生成覆盖率信息
-o 生成目标文件
-d 目录
. 当前目录

可能出现的出错:可能会提示out of memory,原因是locv版本过低。

生成html文件

genhtml test.info -o ./output

tst.info 需要生成覆盖率信息的源文件
-o 生成结果目录
最后会有提示如下:

Generating output.
Processing file gcov_lcov/test.c
Writing directory view page.
Overall coverage rate:
lines……: 91.3% (21 of 23 lines)
functions..: 100.0% (2 of 2 functions)
可以看到output目录下有index.html文件
使用浏览器打开html文件,即可查看覆盖率报告

覆盖率报告分析

gcov

从上图可以看到
整个工程的代码行覆盖率和函数覆盖率,分支覆盖情况
继续点击test.c,可以看到具体每行是否有跑到。
test.c

褐色表示未跑到过的代码,左侧数字表示跑到的次数。

总结

结合使用gcov和locv,可以比较直观的观察到运行的程序是否按照自己的设计,
跑到了对应的代码中。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hyb612/article/details/76790613

Beginner with c# 3

最近很忙,抽空写了这篇。见谅!王先生该不会又是第一个吧!哈哈 1。3 类型 c#支持两种基本的类型:一种是值(value types),一种是引用(reference types)。值包括简单类型 (...
  • kamphkb
  • kamphkb
  • 2002-01-15 21:29:00
  • 661

覆盖率测试工具gcov & lcov使用手册

Gcov: 代码覆盖率工具 1.      编译: 编译时gcc添加编译选项“gcc-fprofile-arcs“和”–ftest-coverage”: e.g:gcc-fprofile-arcs  ...
  • kevin_ji
  • kevin_ji
  • 2016-03-14 13:32:03
  • 2638

GCOV的使用-测试代码覆盖率

1. gcov是什么? Gcov is GCC Coverage 是一个测试代码覆盖率的工具 是一个命令行方式的控制台程序 伴随GCC发布,配合GCC共同实现对C/...
  • heli007
  • heli007
  • 2012-12-07 12:59:51
  • 12338

代码覆盖率分析(gcov)

为什么需要代码覆盖率分析?在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些测试工具(te...
  • yao_zhuang
  • yao_zhuang
  • 2007-11-17 18:52:00
  • 3396

使用gcov生成增量覆盖率报告

lcov可以统计指定目录下的所有代码覆盖率,当前有这样一个诉求:有两个版本的代码:v1和v2,想统计用例v2相对v1增加及修改的代码的覆盖情况,以确认针对这部分代码设计的用例是有效的。然而lcov不支...
  • Ls4034
  • Ls4034
  • 2017-06-08 11:08:51
  • 1029

代码覆盖率测试工具:gcov+lcov

简单介绍代码覆盖率测试工具gcov及前端工具lcov
  • jfleecumt
  • jfleecumt
  • 2017-01-10 09:43:45
  • 1039

Lcov显示分支覆盖率

原因Lcov(1.10及往后)默认是关闭 分支覆盖率的。 需要在参数中加入 --rc lcov_branch_coverage=1 才能使能。 (即修改lcovrc的配置信息)解决措施ENAB...
  • yyw794
  • yyw794
  • 2017-09-13 11:01:21
  • 474

问题:分支覆盖率

 问题:下面这段代码有几个分支?package com.example.simple;public class Simple ...{    public int f(int x) ...{     ...
  • anerou
  • anerou
  • 2007-06-21 13:57:00
  • 1809

代码覆盖率——gcov lcov的使用

代码覆盖率——gcov lcov的使用 分类: linux 2012-06-11 17:55 1284人阅读 评论(0) 收藏 举报 linux内核makefilefileb...
  • jiafu1115
  • jiafu1115
  • 2013-09-25 17:00:07
  • 1128

温故而知新:gtest单元测试工具和lcov覆盖率统计工具的结合使用

一、简介        之所以叫温故而知新,是因为将这两个工具结合起来作为单元测试工具的想法在上一个项目中应用了,好像还没有人将这两种工具结合使用,或者没有写成博客供大家参考,现在重新温习下将想法...
  • u010312436
  • u010312436
  • 2016-12-30 15:05:37
  • 2904
收藏助手
不良信息举报
您举报文章:使用gcov和lcov测试代码覆盖率
举报原因:
原因补充:

(最多只允许输入30个字)