Gcov is GCC Coverage;
是一个测试代码覆盖率的工具;
是一个命令行方式的控制台程序;
伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试;
与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时。
统计每一行代码的执行频率;
实际上哪些代码确实被执行了;
每一段代码(section code)的耗时(执行时间);
因此,gcov可以帮你优化代码,当然这个优化动作还是应该有开发者完成。
gcov的使用修改编译选项,加入-fprofile-arcs -ftest-coverage,或者简单点直接用–coverage,等同于前者,生成二进制文件。
-fprofile-arcs生成.gcda文件一个包含每一个指令分支的执行计数,这些文件会在执行以后与源码文件一起使用,来标识源码的执行行为。
-ftest-coverage生成.gcno文件用来重组每一个可执行程序的程序流图,并在目标文件中插入gcov需要的extra profiling information。因此编译过程中的链接库需要加上-lgcov。
执行该程序,生成.gcda文件(gcov data文件)。
gcov -a xxx.cpp
gcov -b xxx.cpp
gcov -f xxx.cpp
生成xxx.cpp.gcov 文件用vi打开就可以查看覆盖率。
gcov [options] sourcefile
其可用的选项如下:
选项 目的
-v,-version 打印版本信息
-h,-help 打印帮助信息
-b,-branch-probabilities向输出文件输出分支频度
-c,-branch-counts打印分支计数而不是分支频度
-n,-no-output 不创建gcov输出文件
-l,-long-file-names创建长文件名
-f,-function-summaries打印每一个函数的概要
-o,-object-directory.gcno .gcda文件存放的目录
http://blog.chinaunix.net/uid-13182088-id-2904573.html
是GCOV图形化的前端工具
是Linux Test Project维护的开放源代码工具,最初被设计用来支持Linux内核覆盖率的度量
基于Html输出,并生成一棵完整的HTML树
输出包括概述、覆盖率百分比、图表,能快速浏览覆盖率数据
支持大项目,提供三个级别的视图:目录视图、文件视图、源码视图
# 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目录。
以Linux平台代码覆盖率测试工具GCOV简介一文的例子为例。
# 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。其他选项请参考man lcov
# 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)
http://my.oschina.net/alphajay/blog/33725