gcov覆盖率测试
来源:互联网 发布:筛选法求100以内的数组 编辑:程序博客网 时间:2024/05/21 11:19
这里使用gcov工具,gcov是伴随着gcc发布。gcc编译加入-fprofile-arcs -ftest-coverage参数生成二进制程序,执行测试用例生成代码覆盖率信息。
fprofile-arcs参数使gcc创建一个程序的流图,之后找到适合图的生成树。只有不在生成树中的弧被操纵 (instrumented):gcc添加了代码来清点这些弧执行的次数。当这段弧是一个块的唯一出口或入口时,操纵工具代码 (instrumentation code)将会添加到块中,否则创建一个基础块来包含操纵工具代码。gcov主要使用.gcno和.gcda两个文件。
.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。
gcov执行函数覆盖、语句覆盖和分支覆盖。
Lcov则是上的gcov 结果展现的一个前端,可从 http://ltp.sourceforge.net/coverage/lcov.php 下载。可以将覆盖率信息转换成html 展现。
案例:
测试mysql新引擎的覆盖率
在根目录(sql目录)及引擎目录下修改makefile文件:
CXXFLAGS、LIBS变量加上:-fprofile-arcs -ftest-coverage
LDFLAGS = -rdynamic -lgcov
make clean
make
//将新的编译文件拷贝到原来的安装目录下(必须先关闭mysql服务)
sudo cp .libs/ha_isearch.* /u01/mysql.isearch/lib/mysql/plugin/
sudo cp sql/mysqld /u01/mysql.isearch/libexec/ -f
//其中.libs目录为存储引擎生成的动态库目录
// /u01/mysql.isearch/lib/mysql/plugin/:为程序安装后的目录
// sql/mysqld 是相对于代码根目录
//启动mysql服务,并做一个简单的测试
select ...
//关闭mysql服务,此时在引擎的代码目录下的.libs目录下会生成一个".gcda"文件。
//再将".gcda"与".gcno"文件拷贝到代码目录
执行 gcov *.gcda (这个文件是你想要得到的源文件编译后产生的目标文件.o,一样的前缀名)
此时先显示相关文件的覆盖率情况,并得到源码文件的ha_innodb.cc.gcov文件,该文件就包含了所有路径的覆盖情况
在测试的时候覆盖情况是追加的,这样就不必每次都把之前的测试用例跑一遍。(如果要得到新的结果的话只需要把.gcda文件删除掉就可以了,不要删除.gcno文件(如果删除了它的话就必须重新make clean && make),不需要重新编译)
收集覆盖率数据生成app.info文件:
lcov --directory . --capture --output-file app.info
此时如果成功显示如下内容:
Capturing coverage data from .
Found gcov version: 4.1.2
Scanning . for .gcda files ...
Found 2 data files in .
Processing ha_isearch_la-ha_isearch.gcda
Processing .libs/ha_isearch_la-ha_isearch.gcda
Finished .info-file creation
再将app.info转换为http文件:
genhtml -o results app.info
成功显示如下:
Reading data file app.info
Found 8 entries.
Found common filename prefix "/u01/5.1.48.isearch/mysql-5.1.48"
Writing .css and .png files.
Generating output.
Processing file sql/handler.h
Processing file sql/structs.h
Processing file sql/sql_string.h
Processing file sql/mysql_priv.h
Processing file sql/sql_list.h
Processing file storage/isearch/ha_isearch.h
Processing file storage/isearch/ha_isearch.cc
Processing file /usr/include/stdlib.h
Writing directory view page.
Overall coverage rate:
lines......: 59.3% (407 of 686 lines)
functions..: 33.3% (56 of 168 functions)
branches...: 50.3% (145 of 288 branches)
最后在当前目录下可以看到app.info文件与results文件夹。通过浏览器就可以查看results里面文件的内容。
- gcov覆盖率测试
- gcov覆盖率测试
- 利用gcov测试代码覆盖率
- 利用gcov测试代码覆盖率
- 代码覆盖率测试工具gcov
- 代码覆盖率测试,gcov, lcov
- 代码覆盖率测试工具gcov
- gcov代码覆盖率使用gcov完成代码覆盖率的测试
- 用gcov来测试代码覆盖率
- 使用gcov提高代码测试覆盖率
- 使用gcov完成代码覆盖率的测试
- GCOV的使用-测试代码覆盖率
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- 覆盖率测试工具gcov & lcov使用手册
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- gcov测试代码覆盖率的命令
- 测试代码覆盖率-GCOV的使用
- GCov交叉编译覆盖率测试要点
- WoodenSticks(区间贪心类题目)
- 第1章 概述--PADS设计的一般流程
- I/O流
- Android开发之百度翻译
- (9)shell printf命令:格式化输出
- gcov覆盖率测试
- 14.2 事务的ACID属性
- 14.3 事务隔离级别
- 0008-流读取问题
- maven创建父子项目
- 执行包含变量的sql语句并传出指针
- APM_for_PX4_NAVIO+_Erle-Brain AC3.3rc8
- Hazelcast 3.6新特性一览
- 有些事