gcov代码覆盖率测试
gcov代码覆盖率测试
gcov的简单介绍
1.gcov是一个测试代码覆盖率的工具。与GCC一起使用来分析程序,以帮助创建更高效、更快的运行代码,并发现程序的未测试部分
2.是一个命令行方式的控制台程序。需要结合lcov,gcovr等前端图形工具才能实现统计数据图形化
3.伴随GCC发布,不需要单独下载gcov工具。配合GCC共同实现对c/c++文件的语句覆盖和分支覆盖测试
4.与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪段代码最耗时
gcov能做什么
使用像gcov或gprof这样的分析器,您可以找到一些基本的性能统计数据:
- 每一行代码执行的频率是多少
- 实际执行了哪些行代码,配合测试用例达到满意的覆盖率和预期工作
- 每段代码使用了多少计算时间,从而找到热点优化代码
- gcov创建一个sourcefile.gcov的日志文件,此文件标识源文件sourcefile.c每一行执行的次数,您可以与gprof一起使用这些日志文件来帮助优化程序的性能。gprof提供了您可以使用的时间信息以及从gcov获得的信息。
注意事项
1.通过将一些代码行合并到一个函数中,可能不会提供足够的信息来查找代码使用大量计算机时间的“热点”。同样地,由于gcov按行(在最低的分辨率下)积累统计数据,它最适合于只在每行上放置一个语句的编程风格。如果您使用扩展到循环或其他控制结构的复杂宏,那么统计信息就没有那么有用了——它们只报告出现宏调用的行。如果您的复杂宏的行为类似于函数,那么您可以用inline fu替换它们。
2.gcov只在使用GCC编译的代码上工作。它与任何其他概要或测试覆盖机制不兼容。
使用gcov的3个阶段
1.编译阶段
要开启gcov功能,需要在源码编译参数中加入-fprofile-arcs -ftest-coverage
- -ftest-coverage:在编译的时候产生.gcno文件,它包含了重建基本块图和相应的块的源码的行号的信息。
- -fprofile-arcs:在运行编译过的程序的时候,会产生.gcda文件,它包含了弧跳变的次数等信息。
以下我们以test.c这个程序为例子,源码如下:
1 |
|
编译阶段:
2. gcov收集代码运行信息
- 运行
./test
产生test.gcda
文件,其中包含了代码基本块和狐跳变次数统计信息
3. 生成gcov代码覆盖率报告
- 再次运行
gcov test.c
产生的test.c.gcov
中包含了代码覆盖率数据,其数据的来源为test.gcda
4.查看生成gcov代码覆盖率报告
可以看到以下结果:
- 其中
#####
表示未运行的行 - 每行前面的数字表示行运行的次数
- —代表不必执行
1 |
|
配合lcov使用,图形化显示
1.centos安装lcov:
1 |
|
2.运行lcov,生成相应信息
运行结果:
3.生成web可视化信息
运行结果:
4.打包result文件
5.从服务器下载到本地
6.查看web
1)查看index.html:
2)详细信息:
上述界面包含:
- 函数覆盖率(执行率)
- 代码行数覆盖率(执行率)
- 语句执行次数
- 源码级的详细信息
参考资料
(6条消息) gcov代码覆盖率测试-原理和实践总结_yanxiangyfg的专栏-CSDN博客_gcov代码覆盖率-gcov代码覆盖率测试-原理和实践总结
(6条消息) 代码覆盖率测试工具:gcov和lcov的使用_ARM-Linux-CSDN博客-代码覆盖率测试工具:gcov和lcov的使用
linux文件夹打包命令 - 小作一个 - 博客园 (cnblogs.com)-Linux文件打包命令
如何使用gcov和perf工具抓热点代码 - 陈小欧 - 20210331 - PLCT实验室_哔哩哔哩_bilibili-如何使用gcov和perf工具抓热点代码 - 陈小欧 - 20210331 - PLCT实验室
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!