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

来源:互联网 发布:sql 3个引号 编辑:程序博客网 时间:2024/04/29 04:53
本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

Content

1. Lcov是什么?

2. 如何在Linux平台安装Lcov

3. 如何使用Lcov

(1) 使用lcov收集覆盖率数据并写入文件

(2) 使用genhtml生成基于HTML的输出

(3) 该例子的图形显示

4. 编译lcov自带例子

5.其他相关工具

(1) gcov-dump

(2) ggcov

 

 

1. Lcov是什么?

  • GCOV图形化的前端工具
  • Linux Test Project维护的开放源代码工具,最初被设计用来支持Linux内核覆盖率的度量
  • 基于Html输出,并生成一棵完整的HTML
  • 输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据
  • 支持大项目,提供三个级别的视图目录视图文件视图源码视图

Use lcov to collect coverage data and genhtml to create HTML pages. Coverage data can either be collectedfrom the currently running Linux kernel or from a user space application. To do this, you have  to  complete the following preparation steps:

 

For Linux kernel coverage:

  Follow the setup instructions for the gcov-kernel infrastructure:

http://ltp.sourceforge.net/coverage/gcov.php

 

For user space application coverage:

  Compile the application with GCC using the options "-fprofile-arcs" and "-ftest-coverage".

 

2.如何在Linux平台安装Lcov

# wget http://downloads.sourceforge.net/ltp/lcov-1.9.tar.gz

# tar -zxvf lcov-1.9.tar.gz

# cd lcov-1.9

# ls

bin      contrib  descriptions.tests  lcovrc    man    rpm

CHANGES  COPYING  example             Makefile  README

# make install

不需要编译,直接安装即可,lcov,gendesc, genhtml, geninfo, genpng将被安装到/usr/bin目录。

 

3.如何使用Lcov

 

Linux平台代码覆盖率测试工具GCOV简介一文的例子为例。

 

(1)使用lcov收集覆盖率数据并写入文件 

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

Capturing coverage data from .

Found gcov version: 4.1.2

Scanning . for .gcda files ...

Found 1 data files in .

Processing test.gcda

Finished .info-file creation

.表示当前目录,收集coverage data,即.gcda文件中的信息,并写入test.info文件,且取名为test。其他选项请参考lcovmanual页。

 

test.info文件内容如下。

TN:test

SF:/home/zubo/gcc/2011-04-10.sample/test.c

FN:4,main

FNDA:1,main

FNF:1

FNH:1

BRDA:9,2,0,10

BRDA:9,2,1,1

BRDA:12,0,0,0

BRDA:12,0,1,1

BRF:4

BRH:3

DA:4,1

DA:7,1

DA:9,11

DA:10,10

DA:12,1

DA:13,0

DA:15,1

DA:16,1

LF:8

LH:7

end_of_record

(2)使用genhtml生成基于HTML的输出

# genhtml test.info --output-directory output --title "a simple test" --show-details --legend

Reading data file test.info

Found 1 entries.

Found common filename prefix "/home/zubo"

Writing .css and .png files.

Generating output.

Processing file gcc/2011-04-10.sample/test.c

Writing directory view page.

Overall coverage rate:

  lines......: 87.5% (7 of 8 lines)

  functions..: 100.0% (1 of 1 function)

  branches...: 75.0% (3 of 4 branches)

选项解释请参考genhtmlmanual页。cdoutput目录,可以看到,生成了很多相关文件,如下。

# cd output

# ls

amber.png    gcov.css   index-sort-b.html  ruby.png

emerald.png  glass.png  index-sort-f.html  snow.png

gcc          index.html index-sort-l.html  updown.png

(3)该例子的图形显示

 

(3.1) top level的视图




(3.2) 文件或函数的视图


4.编译lcov自带例子

 

# cd /usr/src/lcov-1.9/example

# make

 

编译、运行自带例子并查看结果是快速学习某个工具最好的方法。从examplemakefile文件和编译输出,都可以学习相关概念和命令的使用方法。Html输出可以由/usr/src/lcov-1.9/example/output/index.html查看。读者可自行实验。

 

5.其他相关工具

 

(1) gcov-dump

 

或许,我们还可以使用gcov-dump命令输出gcov的相关数据,但gcc默认不编译gcov-dump,因此,要使用它,可能需要重新编译gcc

 

(2) ggcov

 

Ggcov is a Graphical tool for displaying gcov test coverage data.详细信息可参考http://ggcov.sourceforge.net

 

 

Reference

lcovmanual

genhtmlmanual

geninfomanual

lcovreadme文件,本文/usr/src/lcov-1.9/README

lcovmakefile文件,本文为/usr/src/lcov-1.9/Makefile