Code Coverage系列(三)gcov 是什么?做什么?两个参数?检测原理?gcno文件内容?gcda文件内容?

Code Coverage系列(三)gcov 是什么?做什么?两个参数?检测原理?gcno文件内容?gcda文件内容?

  • [1. gcov 是什么](#1. gcov 是什么)
  • [2. gcov 能做什么](#2. gcov 能做什么)
  • [3. gcov 两个编译参数](#3. gcov 两个编译参数)
  • [4. gcov 检测代码覆盖率的原理-gcov_init,gcov_exit](#4. gcov 检测代码覆盖率的原理-gcov_init,gcov_exit)
  • [5. gcno文件内容](#5. gcno文件内容)
  • [6. gcda文件内容](#6. gcda文件内容)

1. gcov 是什么

gcov是一个测试代码覆盖率的工具,发现程序的未测试部分

是一个命令行方式的控制台程序。需要结合 lcov, gcovr ,genhtml 等前端图形工具才能实现统计数据图形化

复制代码
命令:gcc -fprofile-arcs -ftest-coverage hello.c

2. gcov 能做什么

  1. 每一行代码运行的次数
  2. 哪些代码执行了, 哪些没有被执行
  3. gcov创建一个sourcefile.gcov 的日志文件,此文件标识源文件sourcefile.c每一行执行的次数

3. gcov 两个编译参数

复制代码
-fprofile-arcs 在运行编译过的程序的时候,会产生 .gcda 文件,
	它包含了弧跳变的次数等信息
-ftest-coverage 在编译的时候产生.gcno 文件,
	它包含了重建基本块图和相应的块的源码的行号的信息

4. gcov 检测代码覆盖率的原理-gcov_init,gcov_exit

Gcc中指定-ftest-coverage 等覆盖率测试选项后,gcc 会:

复制代码
* 在输出目标文件中留出一段存储区保存统计数据
* 在源代码中每行可执行语句生成的代码之后附加一段更新覆盖率统计结果的代码,也就是前文说的插桩
* 在最终可执行文件中进入用户代码 main 函数之前调用 gcov_init 内部函数初始化统计数据区,
* 并将gcov_exit 内部函数注册为 exit handlers用户代码调用 exit 正常结束时,
* gcov_exit 函数得到调用,其继续调用 __gcov_flush 函数输出统计数据到 *.gcda 文件中

5. gcno文件内容

6. gcda文件内容

相关推荐
想你依然心痛1 小时前
Linux用户空间与内核空间通信:netlink、ioctl、mmap 零拷贝与性能对比
linux·运维·服务器
做个文艺程序员2 小时前
Linux第12篇:性能监控与瓶颈分析——CPU/内存/IO/网络全维度
linux·运维·网络
HAPPY酷2 小时前
【ROS2】 Conda 环境搭建(命令行版)
linux·运维·python·ubuntu·机器人·conda
hai3152475434 小时前
九章空间几何对照直译法:通用芯片 / 定制专用芯片 编译适配规则
linux·汇编·bash
ton_tom4 小时前
设备驱动程序编程-Linux2.6.10-kdb安装-32位
linux·运维·服务器
dddwjzx4 小时前
嵌入式Linux C应用编程入门——进程 ( 二 )
linux·嵌入式
jieyucx6 小时前
【系统安全铁律】解密 Linux 权限三色数字密码:chmod 最小化赋权与生产环境避坑指南
linux·安全·系统安全·权限·chmod·777
AOwhisky7 小时前
Linux(CentOS)系统管理入门笔记(第四期)——文件系统(下篇):文件与目录操作实战——cpmvmkdirrmln
linux·运维·笔记·centos·云计算·文件系统
岑梓铭7 小时前
考研408《操作系统》复习笔记,第四章《4.2.2 文件操作、文件共享、文件保护》
linux·考研·操作系统·文件系统·408
Mr.HeBoYan7 小时前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk