关闭

linux下codecoverage工具gcov/lcov使用

标签: c++linuxmakefile
2005人阅读 评论(0) 收藏 举报
分类:

gcov是linux下进行代码覆盖测试的工具,随着gcc一起发布。lcov是gcov的图形化前端工具,根据gcov生成的内容,处理成一颗完整的html树,包括概述、覆盖率百分百、图标等轻便直观的内容。下面使用gcov和lcov进行一个简单的demo测试。

1.用gcov选项编译c/c++文件

test.cpp

#include <iostream>
using namespace std;
int main()
{
    for(int i=0;i<10;i++)
        cout<<"hello gcov"<<endl;
    cout<<"hello world"<<endl;
    return 0;
}
编译:g++ -fprofile-arcs -ftest-coverage test.cpp -o test

(也可以把-fprofile-arcs -ftest-coverage加入到makefile里面)


生成目标文件test和对应的test.gcno文件

.
|-- test
|-- test.cpp
`-- test.gcno

0 directories, 3 files

2.收集信息

执行该程序:./test

生成gcda文件

.
|-- test
|-- test.cpp
|-- test.gcda
`-- test.gcno

0 directories, 4 files

gcov生成覆盖信息:gcov test.cpp

.
|-- basic_ios.h.gcov
|-- char_traits.h.gcov
|-- ios_base.h.gcov
|-- iostream.gcov
|-- locale_facets.h.gcov
|-- ostream.gcov
|-- test
|-- test.cpp
|-- test.cpp.gcov
|-- test.gcda
`-- test.gcno

0 directories, 11 files

可以看到test.cpp.gcov的信息

        -:    0:Source:test.cpp
        -:    0:Graph:test.gcno
        -:    0:Data:test.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:#include <iostream>
        -:    2:using namespace std;
        1:    3:int main()
        -:    4:{
       11:    5:    for(int i=0;i<10;i++)
       10:    6:        cout<<"hello gcov"<<endl;
        1:    7:    cout<<"hello world"<<endl;
        1:    8:    return 0;
        3:    9:}
左边的数字表示某行执行了几次

3.用lcov转换成html可视化内容

lcov --capture --directory . --output-file testHtml.info --test-name testHtml

生成对应的info文件

Capturing coverage data from .
Found gcov version: 4.4.6
Scanning . for .gcda files ...
Found 1 data files in .
Processing test.gcda
Finished .info-file creation

.
|-- test
|-- test.cpp
|-- test.gcda
|-- test.gcno
`-- testHtml.info

0 directories, 5 files

生成html内容到result文件夹:genhtml -o result testHtml.info

Reading data file hello_test.info
genhtml: ERROR: cannot read file hello_test.info!
-bash-4.1# genhtml -o result testHtml.info
Reading data file testHtml.info
Found 7 entries.
Found common filename prefix "/usr/include/c++"
Writing .css and .png files.
Generating output.
Processing file /data/heyuxun/leetcode/test.cpp
Processing file 4.4.6/ostream
Processing file 4.4.6/iostream
Processing file 4.4.6/bits/ios_base.h
Processing file 4.4.6/bits/char_traits.h
Processing file 4.4.6/bits/locale_facets.h
Processing file 4.4.6/bits/basic_ios.h
Writing directory view page.
Overall coverage rate:
  lines......: 18.9% (7 of 37 lines)
  functions..: 21.4% (3 of 14 functions)

result里面的结果:


打开网页内容







是不是相当绚丽呢:)


1
0
查看评论

Linux调优工具gprof和gcov的演示分析

一)gprof gprof是一个用来统计可执行程序数据的工具.它能帮助用户确定程序在哪个地方耗时过多. 被编译器生成指令后的代码将会被gprof捕获并进行计算,在gcc编译过程中使用-pg选项编译就会产生指令化工具,当执行编译后的二进制程序时,就会生成一个profile信息的
  • macky0668
  • macky0668
  • 2011-10-01 19:51
  • 6333

Linux平台代码覆盖率测试工具GCOV简介

本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content   1. gcov是什么? 2. gcov能做什么? 3. 如何使用gcov? 3.1 使用gcov的3个阶...
  • livelylittlefish
  • livelylittlefish
  • 2011-04-13 23:15
  • 21255

GCOV 使用用例

<br />转自:http://blogold.chinaunix.net/u3/99507/showart_2146013.html<br />1.GCOV查看arm-linux代码覆盖率<br />一、     ...
  • lsj6730960
  • lsj6730960
  • 2011-01-24 22:03
  • 14051

代码覆盖率——gcov lcov的使用

1.GCOV查看arm-linux代码覆盖率 一、           关于gcov工具 gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参...
  • yukin_xue
  • yukin_xue
  • 2012-06-11 17:55
  • 32047

python代码覆盖率工具——coverage

今天发现了一个好用的python代码覆盖率检查工具:coverage, 可以高亮显示代码中哪些语句未被执行,哪些执行了,方便单测。 环境: Linux x86_64 (不能连外网) 下载: 上 https://pypi.python.org/pypi/coverage 下 coverage...
  • abcjennifer
  • abcjennifer
  • 2015-09-20 17:22
  • 10586

关于C++ code coverage tool 的研究

因为内容太多,开始之前先给个目录: (1)覆盖测试工具的简要对比 (2)LINUX下工具GCOV的实现原理 (3)LINUX下工具GCOV的使用说明   (4 )  WINDOWS下工具coverage validator原理与使用说明 (...
  • windone0109
  • windone0109
  • 2013-11-13 16:38
  • 4625

关于C++ code coverage tool 的研究(1)

关于覆盖测试的基本概念可以上网查阅,这里直接从研究对比开始讲吧。因为内容太多,开始之前先给个目录: (1)覆盖测试工具的简要对比 (2)LINUX下工具GCOV的实现原理 (3)LINUX下工具GCOV的使用说明   (4 )  WINDOWS下工具covera...
  • cancer1617
  • cancer1617
  • 2012-03-05 00:25
  • 2617

关于C++ code coverage tool 的研究(2)—GCOV 实现原理

http://qa.taobao.com/?p=8451 1、背景介绍 GCOV是一个GNU的本地覆盖测试工具, 伴随GCC发布,配合GCC共同实现对C或者C++文件的语句覆盖和分支覆盖测试。是一个命令行方式的控制台程序。需要工具链的支持。 LCOV由 IBM 开发,由 Lin...
  • diy534
  • diy534
  • 2011-12-24 02:16
  • 2748

gcov lcov (一)

Gcov作为gnu/gcc工作组件之一,是一款的免费的代码覆盖率测试工具,而且可以结合lcov生成美观的html的测试报表。本文介绍一些gcov的使用方法,基本原理,一些实际中可能会遇到的问题以及解决思路。 Gcov的用法 1.1     ...
  • panfengsoftware
  • panfengsoftware
  • 2013-06-25 19:52
  • 1488

Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 1. Lcov是什么? 2. 如何在Linux平台安装Lcov? 3. 如何使用Lcov? (1) 使用lcov收集覆盖...
  • livelylittlefish
  • livelylittlefish
  • 2011-04-13 23:24
  • 13089
    个人资料
    • 访问:458726次
    • 积分:5825
    • 等级:
    • 排名:第5264名
    • 原创:110篇
    • 转载:58篇
    • 译文:3篇
    • 评论:190条
    博主描述
    艺术?技术?finance?
    邮箱:tashaxing123@163.com
    [新浪微博]:踏莎行hyx
    [github]: tashaxing
    文章分类
    最新评论