什么是C语言C0覆盖率测试,用gcov测试代码覆盖率

gcov是什么?Gcov is GCC Coverage,是一个测试代码覆盖率的工具,是一个命令行方式的控制台程序,伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试;

与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时;

注:程序概要分析工具是分析代码性能的工具。

gcov能做什么?gcov可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code)的耗时(执行时间),因此,gcov可以帮你优化代码,当然这个优化动作还是应该有开发者完成。

gcov的使用比较麻烦,首先需要修改编译选项,加入-fprofile-arcs -ftest-coverage,或者简单点直接用--coverage,等同于前者。另外编译过程中的链接库需要加上-lgcov。

在编译之后,除了生成可执行文件外,还会生成gcov需要的额外信息,文件后缀为.gcno。

如果程序是cli命令行,执行一次得出结果立马退出结束了,那么会直接生成后缀为.gcda的gcov data文件。

如果程序是守护进程,需要常驻后台不能退出,则需要通过信号处理机制来dump出gcov需要的data文件,因此在处理信号的代码中加入如下几行:

[c++]

extern "C" void __gcov_flush();

switch (signo) {

...

case SIGINT:

// flush out gcov stats data

__gcov_flush();

这样就会dump出data文件了。

之后对每个.gcno文件生成.gcov文件,比如gcno文件名是recserver-main.gcno,那么执行gcov recserver-main,就会生成一堆.gcov文件,打开每个gcov文件,第一列,每个数字,就是所在行的执行次数。

为了方便阅读,我们还有工具把这些文件转换成可读性更强的web,这个工具叫做lcov,下载lcov安装完成后运行:

lcov -b ./ -d ./ --gcov-tool /usr/bin/gcov -c -o output.info

这样就会生成一个output.info文件。

lcov参数的含义大家自己去查就好了。

然后我们用genhtml命令就可以生成可以阅读的web页面了:

genhtml -o gcovdir/ output.info

-o选项把生成的web页面指定到gcovdir目录

生成的web页面如图:

c69b7889e878

QQ截图20150407150551.png

左边每个链接都可以点进去:

c69b7889e878

QQ截图20150407150551.png

会看到代码和旁边的运行次数。

c69b7889e878

QQ截图20150407150551.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值