zoukankan      html  css  js  c++  java
  • 使用GCOV进行代码覆盖率统计

    GCOV是随GCC一起发布的用于代码覆盖率统计的工具,一般配合其图形化工具LCOV一起使用。

    一、安装

    GCOV不需要单独安装,LCOV下载后执行sudo make install即可完成安装。

    二、使用

    下面以针对hello.c文件的覆盖率统计为例,说明使用方法。

    #include<stdio.h>
    
    int main(int argc,char* argv[])
    {
        if(argc>1)
           printf("if
    ");
        else
           printf("else
    ");
        return 0;
    }

    编译:

            # gcc -fprofile-arcs -ftest-coverage hello.c -o hello       (编译完成后,会生成:hello.gcno,由-ftest-coverage产生,它包含了重建基本块图和相应的块的源码的行号的信息)

    运行:

            # ./hello      (这一步会生成 hello.gcda, 由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息)

    生成代码覆盖信息:

            # gcov hello.c       (这一步生成hello.c.gcov,就是代码覆盖信息,hello.c.gcov 文件中包含了代码覆盖的统计数据,数字代表了每行代码被执行的次数及行号)

    到这一步,就可以打开hello.c.gcov查看代码覆盖率,但是不够直观,因此需要借助LCOV实现代码覆盖率统计数据的图形化显示。

    生成LCOV可读的文件:

           # lcov -d . -t 'Hello test' -o 'hello_test.info' -b . -c          (我们借助lcov对hello.c.gcov进行改造,可以看见生成了hello_test.info)

    生成图形化展示结果:

           # genhtml -o result hello_test.info                                  (生成了result文件夹,借助web服务器,我们就可以很直观的看到结果了)

    用浏览器打开index.html即可看到直观的统计数据。

    三、遇到的问题

    执行完./hello,发现并没有在当前目录生成gcda文件,进一步执行gcov hello.c可见如下错误:

    hello.gcda:无法打开数据文件,假定未被执行过

    3.gcno:cannot open notes file

    File ‘Hello.c’

    没有可执行行

    Removing ‘hello.c.gcov

    生成上述错误的原因是所使用机器以前有人在bash_profile中对GCOV进行了配置,指定生成gcda文件到其它的路径了。解决的方法很简单,只要设一下GCOV_PREFIX和GCOV_PREFIX_STRIP这两个环境变量就可以了。GCOV_PREFIX制定生成数据文件的前缀,GCOV_PREFIX_STRIP表示需要在原来的路径上去掉多少层目录,通过指定这两个变量的值把数据文件生成到我们想要的地方

    export GCOV_PREFIX=”/home/dce/work/test/”
    export GCOV_PREFIX_STRIP=5
  • 相关阅读:
    创业失败,是应该坚持还是给别人打工?
    在三四线小城市投资3至8万,做什么小生意好?
    在小县城做什么生意好?
    在农村创业有哪些优势和机会?
    听说做餐饮的都在赔钱,为什么新店却越开越多?
    现在做什么行业好一点?
    手头有五万左右,想做个小生意,有什么值得推荐的?
    可以给我个创业的建议吗?
    如果你现在月工资纯入7千左右,30多岁有家庭但前途迷茫,你会独自创业打拼吗?
    JeeSite 4.0 简化业务逻辑层开发
  • 原文地址:https://www.cnblogs.com/ttssrs/p/9990574.html
Copyright © 2011-2022 走看看