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文件一一对应,然后再进行覆盖率报告的生成。
  • 相关阅读:
    ASP.NET:在一般处理程序中通过 Session 保存验证码却无法显示图片?
    HTML中哪些标签的值会被提交到服务器呢?
    Java泛型之Type体系
    Java 调用 shell 脚本详解
    quartz详解2:quartz由浅入深
    Java 服务端监控方案(四. Java 篇)
    Apache Storm 学习资料
    开源框架是如何通过JMX来做监控的(一)
    Kafka Streams简介: 让流处理变得更简单
    linux 技巧:使用 screen 管理你的远程会话
  • 原文地址:https://www.cnblogs.com/tongyishu/p/12721089.html
Copyright © 2011-2022 走看看