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文件内容

相关推荐
雯宝3 小时前
mnt_init 函数
linux
律宏阔9 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔9 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴9 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千9 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei379 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei379 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei379 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW9 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW9 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux