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

xiaoxiao2021-02-28  58

最新内容地址:使用gcov和lcov测试代码覆盖率

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文件,即可查看覆盖率报告

覆盖率报告分析

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

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

总结

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

本文作者: 守望 本文链接: www.yanbinghu.com/2017/08/06/13981.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

转载请注明原文地址: https://www.6miu.com/read-59146.html

最新回复(0)