使用gcov和lcov测试代码覆盖率
来源:互联网 发布:js eval函数 json 编辑:程序博客网 时间:2024/05/17 00:59
原文地址
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,可以比较直观的观察到运行的程序是否按照自己的设计,
跑到了对应的代码中。
- 使用gcov和lcov测试代码覆盖率
- 代码覆盖率测试,gcov, lcov
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- 代码覆盖率测试工具:gcov+lcov
- gcov和lcov配合使用可视化展示代码覆盖率文件。
- gcov和lcov代码覆盖率工具
- Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
- CMake编译项目集成Gcov/Lcov代码覆盖率测试
- 代码覆盖率——gcov lcov的使用
- 代码覆盖率——gcov lcov的使用
- 代码覆盖率——gcov lcov的使用
- gcov和lcov对linux c++分析代码覆盖率
- gcov和lcov对linux c++分析代码覆盖率
- GCOV+LCOV 代码调试和覆盖率统计工具
- C/C++代码覆盖率工具:gcov和lcov的使用入门
- C/C++代码覆盖率工具:gcov和lcov的使用入门 .
- gcov代码覆盖率使用gcov完成代码覆盖率的测试
- 如何定位和解决Andorid的内存溢出问题(转载)
- POJ
- 编程练习2——03
- hdu--6078--Wavel Sequence(dp)
- android屏幕旋转,但是不重建生命周期
- 使用gcov和lcov测试代码覆盖率
- android databinding RecyclerView / ListView
- 一个小demo
- 短信验证码
- 工厂模式
- 排序3——堆排序,归并排序,快速排序
- 两种Linux系统安装方式:预装和非预装
- 2054数据结构实验之链表九:双向链表
- Java返回语句-return