gcov 是一个可用于C/C++的代码覆盖工具,是gcc 的内建工具。下面介绍一下如何利用gcov 来收集代码覆盖信息。
想要用gcov 收集代码覆盖信息,需要在gcc 编译代码的时候加上这2个选项 “-fprofile-arcs -ftest-coverage”,把这个简单的程序编译一下

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

编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ftest-coverage”参数,就会生成这个.gcno文件,它包含了程序块和行号等信息
接下来可以运行这个hello的程序

./hello 5
./hello 12

运行结束以后会生成一个hello.gcda文件,如果一个可执行文件带有“-fprofile-arcs”参数编译出来,并且运行过至少一次,就会生成。这个文件包含了程序基本块跳转的信息。接下来可以用gcov生成代码覆盖信息:

gcov hello.c

运行结束以后会生成2个文件hello.c.gcov和myfunc.c.gcov。打开看里面的信息:

-: 0:Source:myfunc.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include
-: 2:
-: 3:void test(int count)
1: 4:{
-: 5: int i;
10: 6: for (i = 1; i < count; i++)
-: 7: {
9: 8: if (i % 3 == 0)
3: 9: printf (“%d is divisible by 3 /n”, i);
9: 10: if (i % 11 == 0)
#####: 11: printf (“%d is divisible by 11 /n”, i);
9: 12: if (i % 13 == 0)
#####: 13: printf (“%d is divisible by 13 /n”, i);
-: 14: }
1: 15:}

被标记为#####的代码行就是没有被执行过的,代码覆盖的信息是正确的,但是让人去读这些文字,实在是一个杯具。不用担心,有另外一个工具叫lcov,可以用程序解析这些晦涩的字符,最终输出成html格式的报告,很好吧!

lcov -d . -t ‘Hello test’ -o ‘hello_test.info’ -b . -c

指定lcov在当前目录“.”去找代码覆盖的信息,输出为’hello_test.info’ ,这个hello_test.info是一个中间结果,需要把它用genhtml来处理一下,genhtml是lcov里面的一个工具。

genhtml -o result hello_test.info

指定输出目录是 result。一个完整的html报告就生成了,做一个连接,把这个目录连到随便一个web server的目录下,就可以看报告了。

gcc 参数 -fprofile-arcs -ftest-coverage作用相关推荐

  1. Linux平台Makefile文件的编写基础篇和GCC参数详解

    问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...

  2. 02_可执行文件生成过程和gcc参数介绍

    文章结构 可执行文件生成过程 1. 预处理器 2. 编译器 3. 汇编器 4. 链接器 gcc参数用法 语法 参数 可执行文件生成过程 对于一个源文件test.c生成可执行文件test.out的过程如 ...

  3. 超参数momentum与weight-decay的作用

    超参数momentum与weight-decay的作用 原文:https://blog.csdn.net/u012938704/article/details/52739612/ 一.weight d ...

  4. gcc参数 -i, -L, -l, -include

    gcc参数 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢? ...

  5. GCC 参数列举及解释

    GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分. gcc 与 g++ 分 ...

  6. 聊聊gcc参数中的-I, -L和-l

    http://blog.csdn.net/stpeace/article/details/49408665 在本文中, 我们来聊聊gcc中三个常见的参数, 也即-I, -L和-l 一. 先说 -I   ...

  7. 【Verilog HDL】参数(Parameter)的作用案例

    我在学习Verilog HDL的时候并没有系统的去学,只是大致的了解了下,然后就用一些常用的语法去设计简单常见的硬件电路,这样做的好处是节省时间,也不会感觉重新学习一门语言很累,但是也会遇到一些问题, ...

  8. gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小

    背景 在开发一个项目时,使用了非常多的第三方.a静态库文件,导致编译出的可执行文件非常大.这样一是占用ROM空间,二是会导致程序启动加载速度变慢(项目对启动时间非常敏感).其实,这些静态库中的函数,并 ...

  9. 使用gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小

    背景 在开发一个项目时,使用了非常多的第三方.a静态库文件,导致编译出的可执行文件非常大.这样一是占用ROM空间,二是会导致程序启动加载速度变慢(项目对启动时间非常敏感).其实,这些静态库中的函数,并 ...

最新文章

  1. EF-Net一种适用于双流SOD的有效检测模型(Pattern Recognition)
  2. 谷歌提出新型卷积网络EfficientNet:推理速度提升5.1倍,参数减少88%(附论文代码)...
  3. 初步了解BIM模型和超图相关操作
  4. 采用预取(Prefetch)来加速你的网站(转)
  5. 图像处理前沿技术_深入浅出人工智能前沿技术—机器视觉检测,看清人类智慧工业...
  6. html5标签的兼容性处理
  7. jquery focus() 手机端无效
  8. ASP.NET MVC实现网站验证码功能
  9. C语言图形编程中的绘图函数~
  10. win10计算机策略组在哪,win10家庭版的组策略在哪里打开
  11. ubuntu20.04上编译android 7.1
  12. Altium Designer 19.1.18 - 隐藏某一个网络的飞线
  13. 唯品会开源分布式作业调度平台Saturn
  14. java网络编程--URLEncode和URLDecoder
  15. 从零开始写第一个Flutter app(八)——修改主题颜色
  16. Mysql查询各科成绩前三名并分别排序
  17. 简单的tcpdump抓包使用总结:抓取指定ip、指定网卡、指定端口的包
  18. 将Liunx装入移动硬盘,实现即插即用
  19. 用软件可编程FPGA加速网络边缘的移动应用总结
  20. Opencv Python版学习笔记01.计算机眼中的图像

热门文章

  1. Spring MVC控制器用@ResponseBody声明返回json数据报406的问题
  2. CodeForces - 1337E Kaavi and Magic Spell(dp)
  3. 共享单车数据集_共享单车数据可视化报告
  4. 怎么打_打工人|你怎么打工人了?
  5. codesys 简单案例_第一章:初识Codesys-1.4从一个示例程序讲起
  6. Dominant Indices(CF 1009 F)
  7. mupdf-android-viewer 设计与实现浅析
  8. Redis 缓存常见问题:缓存一致性的解决方案
  9. Linux 进程(一) 进程概念和进程状态(僵尸进程、孤儿进程、守护进程)
  10. 数据结构与算法 | 链表