网络上php代码的覆盖率统计特别多,C/C++的不多见,大概是因为c/C++的收费?不知道= =

感谢原作者,原微博地址:http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html

http://ltp.sourceforge.net/coverage/lcov.php demo

主要操作是:1 用gcov完成对c/c++文件的覆盖;2 通过lcov生成覆盖率报告;3 集成到jenkins的自动化case(需要自己做)

本章只写最简单的应用:编译单个c文件,生成lcov报告

一  搭建环境

我是直接在linux下运行程序,因此只需安装gcov和lcov环境即可

  • 安装gcov环境

    • 惭愧我服务器上有,所以没有安装。版本如下:gcov -v(跟gcc绑定的)                 
  • 安装lcov环境:https://sourceforge.net/projects/ltp/ 可下载不同版本
  • cd /usr/local
    wget http://sourceforge.net/projects/ltp/files/Coverage%20Analysis/LCOV-1.12/lcov-1.12.tar.gz
    tar -xzvf lcov-1.12.tar.gz
    cd lcov-1.12
    make install
    lcov -v   查看版本:lcov: LCOV version 1.12 即安装成功不需要编译,直接安装。lcov, gendesc, genhtml, geninfo, genpng将被安装到/usr/bin目录。

二   编写一个简单的c++文件。fib.c(斐波那契数列)

 1 #include <stdio.h>
 2 int fibonacci(int n);
 3
 4 int main ()
 5 {
 6    int fib;
 7    int n;
 8
 9    for (n = 0; n <= 10; n++) {
10       fib = fibonacci(n);
11       printf("fibonnaci(%d) = %d\n", n, fib);
12    }
13
14    return 0;
15 }
16
17 int fibonacci(int n)
18 {
19    int fib;
20    if (n <= 0) {
21       fib = 0;
22    }
23    else if (n == 1) {
24       fib = 1;
25    }
26    else {
27       fib = fibonacci(n -1) + fibonacci(n - 2);
28    }
29
30    return fib;
31 }

三 gcov覆盖代码

1. 编译:gcc -c fib.c -ftest-coverage -fprofile-arcs

检查发现生成了fib.gcno和fib.o文件,即正确

.gcno由-ftest-coverage产生,包含了重建基本块图和相应的块的源码的行号的信息。

2 链接:以下三者择一即可,生成可执行文件fib

gcc fib.o -o fib --coverage //我用的这个
gcc fib.o -o fib -lgcov
gcc fib.o -o fib -fprofile-arcs

3 运行fib:./fib

生成gcda文件,.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。见附1

4 生成gcov报告:gcov fib.c

生成的fib.c.gcov文件包含了代码覆盖的统计数据,数字代表每行代码被执行的次数及行号。

  1         -:    0:Source:fib.c2         -:    0:Graph:fib.gcno3         -:    0:Data:fib.gcda4         -:    0:Runs:15         -:    0:Programs:16         -:    1:#include <stdio.h>7         -:    2:8         -:    3:int fibonacci(int n);9         -:    4:10         1:    5:int main ()11         -:    6:{12         -:    7:   int fib;13         -:    8:   int n;14         -:    9:15        12:   10:   for (n = 0; n <= 10; n++) {16        11:   11:      fib = fibonacci(n);17        11:   12:      printf("fibonnaci(%d) = %d\n", n, fib);18         -:   13:   }19         -:   14:20         1:   15:   return 0;21         -:   16:}22         -:   17:23       453:   18:int fibonacci(int n)24         -:   19:{25         -:   20:   int fib;26       453:   21:   if (n <= 0) {27        89:   22:      fib = 0;28         -:   23:   }29       364:   24:   else if (n == 1) {30       143:   25:      fib = 1;31         -:   26:   }32         -:   27:   else {33       221:   28:      fib = fibonacci(n -1) + fibonacci(n - 2);34         -:   29:   }35         -:   30:36       453:   31:   return fib;37         -:   32:}

man

四 lcov整理覆盖率数据

1. 使用已生成的.gcon .gcda文件生成覆盖率数据fib.info文件    lcov -c -o fib.info -d .

其中:-c lcov的操作,表示要去捕获覆盖率数据

-o 输出文件,后面跟目标文件

-d 源文件.gcno .gcda所在文件夹,此处为'.'意为当前文件夹

[mobdev@ip-*** gtest]$lcov -c -o fib.info -d .
Capturing coverage data from .
Found gcov version: 4.8.3
Scanning . for .gcda files ...
Found 1 data files in .
Processing fib.gcda
Finished .info-file creation  //表示成功

2. 生成html格式的报告: genhtml fib.info -o fib_result

即将文件fib.info生成html输出到fig_result文件夹内

[mobdev@ip-*** gtest]$genhtml fib.info -o fib_result
Reading data file fib.info
Found 1 entries.
Found common filename prefix "***cppTest"
Writing .css and .png files.
Generating output.
Processing file gtest/fib.c
Writing directory view page.
Overall coverage rate:lines......: 100.0% (12 of 12 lines)  //代码逻辑行覆盖率functions..: 100.0% (2 of 2 functions)//代码方法覆盖率

3 压缩文件下载到windows系统,并打开查看网页版

tar cvf fib_result.tar.gz fib_result/
sz  fib_result.tar.gz   //下载windows路径
在windows路径下,解压tar.gz文件,进入路径,在浏览器打开index.html如下图 

五  问题

1 执行lcov命令时,报错"Out of memory!",生成的fib.info文件夹为空。是因为版本不匹配

解决:查看版本如下,需要更新lcov的版本。1.10以上的lcov才支持4.8的gcov

[user@ip-******* gtest]$gcov -v
gcov (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.[user@ip-******* gtest]$lcov -v
lcov: LCOV version 1.9

2 后续再补充

附件为编译的各个文件的解析。

附1 od -t x4 -w16 fib.gcda

http://www.linuxidc.com/Linux/2011-05/36537.htm

转载于:https://www.cnblogs.com/zhaoxd07/p/5604049.html

【C++】非原创|统计代码覆盖率(一:C)相关推荐

  1. 青龙羊毛——旅游链(搬运,非原创)

    大佬叫写的毛,不知道有啥子有,自己慢慢玩吧! 码子 大佬码子→尊重知识 菜鸡码子→感谢支持 这次没人怀疑码子真假了吧? 脚本 ql raw https://gitee.com/soy-tool/app ...

  2. 青龙羊毛——东方头条(搬砖,非原创)

    改版公告--新青龙羊毛 1.东方头条 软件自己去找,不放邀请链接! 作者码子:003584319 我的码子:003170160(别填我码子了,刚注册就黑了!) 2.脚本 宝箱 https://raw. ...

  3. 青龙羊毛——杀猪盘(搬砖,非原创)

    青龙羊毛改版第一更,杀猪盘合集! 改版公告--新青龙羊毛 1.鑫广 和亿享云差不多的东西,自己看! 2.脚本 https://gitee.com/gossh520/script/raw/master/ ...

  4. Java 表达式解析(非原创)

    因项目需要,在网上找来一套表达式解析方法,由于原来的方法太过于零散,不利于移植,现在整理在同一文件内: 文件中包含5个内部类,源码如下: 1 import java.util.ArrayList; 2 ...

  5. (淘宝无限适配)移动手机端rem布局详解(转载非原创)

    https://www.cnblogs.com/well-nice/p/5509589.html (淘宝无限适配)手机端rem布局详解(转载非原创) 从网易与淘宝的font-size思考前端设计稿与工 ...

  6. 结构光相机国产、非国产统计参数对比分析

    结构光相机国产.非国产统计参数对比分析 1. Kinect v1 Kinect v1深度相机拥有一个RGB彩色摄像头,一个红外线CMOS摄像机和一个红外发射器.相机的红外线CMOS摄像机和红外发射器以 ...

  7. 智能门锁-手机应用相机国产、非国产统计参数对比分析

    智能门锁-手机应用相机国产.非国产统计参数对比分析 智能门锁应用 从2019年1月1日至2020年12月31日,3D人脸识别智能门锁在全市场统计中,总销量已接近20万套.其中德施曼以其先发优势,良好的 ...

  8. Kinect与TOF、双目、结构光相机比较相机国产、非国产统计参数对比分析

    Kinect与TOF.双目.结构光相机比较相机国产.非国产统计参数对比分析 Kinect v1和Kinect v2之间的参数比较 从图中可以看出,Kinect v2的表现比Kinect v1要好得多: ...

  9. kissme病毒解决办法(非原创)

    kissme病毒解决办法(非原创) 几周前发现自己的回收站会莫名奇妙的被清空,在使用软件导入一些文件的时候也会出现找不到的情况,昨天发现一些文件夹莫名其妙变成了exe格式,D盘里一个名为qqpet的文 ...

  10. 45种攻入后台的方法(非原创,来自伟大的网络)

    45种攻入后台的方法(非原创,来自伟大的网络) 1.到Google搜索,site:cq.cn inurl:asp 2.到Google,搜索一些关键字,edit.asp? 韩国肉鸡为多,多数为MSSQL ...

最新文章

  1. 【C#日期系列(一)】--C#获取某月第一天0分0秒以及最后一天59分59秒
  2. php如何抓取一行的内容,提取一行作为对象 - PHP 7 中文文档
  3. Hadoop 大数据平台架构与实践
  4. 信息学奥赛一本通 1048:有一门课不及格的学生 | OpenJudge NOI 1.4 10
  5. Java基础学习总结(152)——JDK 1.7和 JDK 1.8中HashMap的实现有什么不同?
  6. 【Python配置】Win10配置Python3、Numpy、PyCharm、Anaconda
  7. 《2022产业互联网安全十大趋势》正式发布
  8. 【HDU5409】CRB and Graph 边双联通 子树最值
  9. 常见的图标库有哪些?
  10. 网易评论真搞笑~~~呵呵
  11. 科技论文写作经验之谈
  12. [转载] UEFI+GPT双硬盘安装Win10+Ubuntu16.04双系统
  13. 从0开发《工程测绘大师》小程序之什么是微信小程序篇(一)
  14. <<算法很美>>——(四)——深入递归<一>——自上而下,自下而上
  15. 推荐系统之DIN模型(注意力机制对业务的理解)
  16. crash 和 anr的区别
  17. 公司突然断网故障排查
  18. 线上线下课程教学培训小程序开发制作功能介绍
  19. 拉马努金:“与神对话”的数学天才
  20. PHM智能诊断及健康管理保障系统

热门文章

  1. 在发送邮件HTML中,CSS等问题
  2. C++学习笔记 之 循环
  3. HDU2072 tri树/map/set/字符串hash
  4. LeetCode——remove-duplicates-from-sorted-list
  5. hdoj 4940 强连通图
  6. 第三讲 对话框的创建
  7. Kubernetes kubeadm 安装记录
  8. [转载]云架构师的进阶之路
  9. wx:if 与hidden
  10. cookie和session基础以及在Django中应用