zoukankan      html  css  js  c++  java
  • 使用gcov和lcov进行覆盖率统计

    gcov是伴随gcc一起发布的代码覆盖率统计的工具,不需要单独安装,一般配合其图形化工具lcov一起使用。

    下面以a.c文件的编译运行来统计代码覆盖率来介绍gcov和lcov的使用:(lcov自行安装)

    #include <stdio.h>
    
    int add(int a, int b)
    {
        int c = a + b;
        return c;
    }
    
    int main()
    {
        int ret = add(4, 5);
        printf("ret ==> %d
    ", ret);
        return 0;
    }

    编译 :  gcc –o a a.c -fprofile-arcs -ftest-coverage –lgcov 

    编译完成后会生成a.gcno文件

    运行: ./a 

        运行完成后会生成a.gcda文件

    覆盖率报告的生成

    lcov -c -d ./ -o coverage.info # -d 指定编译的目录,进行.gcno和.gcda文件的扫描,生成coverage.info文件
    genhtml -o report coverage.info # 利用lcov生成的coverage.info文件形成html可视化的覆盖率报告

    命令执行完成后会生成report目录,双击index.html即可在浏览器中查看覆盖率信息。

    相关说明:

    • 编译阶段会生成.gcno文件,.gcno文件是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
    • 运行阶段会产生.gcda文件,.gcda文件是由-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息,而gcda只能在程序运行完毕后才能产生。
    • 由于编译阶段依赖gcov库,所以要加上-lgcov选项。
    • 如果编译环境和运行环境相同, .gcno文件和.gcda文件会生成于同名.c文件所在的目录。比如 a.c位于/home/workspace/目录之下,那么生成的.gcno和.gcda也位于/home/workspace/目录之下。
    • 如果编译环境和运行环境不同,会在运行环境中生成和编译环境相同的目录结构来存放.gcda文件。比如编译环境中.gcno所在目录为/home/workspace/,那么在运行环境中也会产生一个/home/workspace/目录用于存放.gcda文件,这时如果想要生成覆盖率报告,需要先将.gcda文件拷贝到编译环境中与其同名的.gcno文件所在目录,使gcno与gcda文件一一对应,然后再进行覆盖率报告的生成。
  • 相关阅读:
    Http接口安全设计
    RTMP服务器搭建(nginx+rtmp)
    OSI七层协议详解
    TCP协议的3次握手与4次挥手过程【深度详解】
    new和delete的深层次剖析(C++)
    大小端模式详解
    MP4文件格式分析及分割实现(附源码)
    使用HBuilder将H5的项目打包成手机可安装的webapp程序(.apk)
    Centos7 解决odoo10打印条形码显示方框乱码的问题
    linux 中运行Django项目
  • 原文地址:https://www.cnblogs.com/tongyishu/p/12721089.html
Copyright © 2011-2022 走看看