当前位置: 首页 > article >正文

gcov的覆盖率统计

gcov的覆盖率统计

程序代码

先写个程序测试用例

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{   
    if (argc >=2) {
        printf("=====argc>=2\n");
        return 1;
    }
    printf("helloworld begin\n");

    if (argc <2){
        printf("=====argc<2\n");
        return 2;
    }
    return 3;
}

执行:

gcc -fprofile-arcs -ftest-coverage helloworld_gcov.c

-fprofile-arcs -ftest-coverage告诉编译器生成gcov需要的额外信息,并在目标文件中插入gcov需要的extra profiling information。因此,该命令在生成可执行文件的同时生成gcov note文件(helloworld_gcov.gcno)。

收集更多信息指标

./a.out

数据报告

gcov helloworld_gcov.c

输出:

File 'helloworld_gcov.c'
Lines executed:66.67% of 9
Creating 'helloworld_gcov.c.gcov'

会生成新的文件 helloworld_gcov.c.gcov

        -:    0:Source:helloworld_gcov.c
        -:    0:Graph:helloworld_gcov.gcno
        -:    0:Data:helloworld_gcov.gcda
        -:    0:Runs:1
        -:    1:#include <stdio.h>
        -:    2:#include <string.h>
        -:    3:
        1:    4:int main(int argc, char *argv[])
        -:    5:{   
        1:    6:    if (argc >=2) {
    #####:    7:        printf("=====argc>=2\n");
    #####:    8:        return 1;
        -:    9:    }
        1:   10:    printf("helloworld begin\n");
        -:   11:
        1:   12:    if (argc <2){
        1:   13:        printf("=====argc<2\n");
        1:   14:        return 2;
        -:   15:    }
    #####:   16:    return 3;
        -:   17:}

其中#####表示未运行的行
每行前面的数字表示行运行的次数

文件名及含义:
helloworld_gcov.gcda 生成gcov data文件
helloworld_gcov.s 汇编语言源程序; 操作: 汇编
helloworld_gcov.c.gcov 可视化执行代码报告
helloworld_gcov.gcno .gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息

可视化及覆盖率

apt install lcov -y
或者
https://github.com/linux-test-project/lcov
make install
lcov --capture --directory . --output-file coverage.inf  

genhtml coverage.info --output-directory out

image-20230315115827842

image-20230315115737098

合并覆盖率统计信息

./a.out i 4 执行的时候传个参数 程序执行的路径就会发生变化

lcov -c -d . o coverage2.info 生成新的info文件

genhtml -o 2 coverage2.info 生成新的html

genhtml -o combine coverage.info coverage2.info 进行合并info文件覆盖率

下图分别是1、2、合并。共三张图

image-20230315115737098

image-20230315121057205

image-20230315121107890

看了上图不知道你有没有发现啥异常,提示一下 我不能在同一文件夹下进行操作,必须加上rm helloworld_gcov.gcda 保障生成的是新的。

不信我再测试一下,不删除的情况下,进行生成info(更换参数)

./a.out i 1

image-20230315121621090

如果删除了gcda文件之后就正常了 (重在理解 不可照搬)

image-20230315133350616

image-20230315133908768

这是正常合并的内容。

编译器

持续更新


http://www.kler.cn/a/380.html

相关文章:

  • 鸿蒙之路的坑
  • C语言基础:指针(数组指针与指针数组)
  • 赛博错题本
  • rabbitmq相关使用
  • VMware Workstation虚拟机网络模式
  • 【设备 磁盘】重要备份存放U盘的风险 + winhex 磁盘清零(清理windows无法格式化的磁盘)
  • RK3568平台开发系列讲解(Linux系统篇)消息队列
  • 蓝桥杯刷题冲刺 | 倒计时28天
  • day8-字典作业
  • ChatGPT的前世今生
  • 【网络编程】
  • Mybatis之Mapper代理开发
  • IOS - 抓包通杀篇
  • 【c++】:模拟实现STL模板中的string
  • 2023携程面试题
  • 系统重装漏洞
  • 【项目实现典型案例】12.数据库数据类型不一致导致查询慢
  • Visual Studio 2022 安装.NET Framework4.5及以下目标包
  • 利用蜜罐捕捉攻击实验(31)
  • docker-dockerfile
  • 初入了解——什么是VUE
  • 在 4G 内存的机器上,申请 8G 内存会怎么样?
  • 想要成为高级网络工程师,只需要具备这几点
  • C语言函数调用栈
  • 论文阅读:NeRF Representing Scenes as Neural Radiance Fields for View Synthesis
  • 33个非常实用的JavaScript一行代码