gcov lcov 覆盖c/c++项目入门
来源:互联网 发布:淘宝法律专业自考通 编辑:程序博客网 时间:2024/05/20 05:26
1、分别执行如下两条命令,就自动完成 gcov 和 lcov 的安装
$ sudo apt-get install gcov$ sudo apt-get install lcov
2、这里举斐波那契数列的一个程序为例
1 #include <stdio.h> 2 3 int fibonacci(int n); 4 5 int main () 6 { 7 int fib; 8 int n; 9 10 for (n = 0; n <= 41; n++) {11 fib = fibonacci(n);12 printf("fibonnaci(%d) = %d\n", n, fib);13 }14 15 return 0;16 }17 18 int fibonacci(int n)19 {20 int fib;21 if (n <= 0) {22 fib = 0;23 }24 else if (n == 1) {25 fib = 1;26 }27 else {28 fib = fibonacci(n -1) + fibonacci(n - 2);29 }30 31 return fib;32 }GCOV 用于简单项目的覆盖
1. 编译
$ gcc -c fib.c -ftest-coverage -fprofile-arcs
除了 fib.o 之外,还生成了 fib.gcno 的话,成功了
.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
2. 链接
$ gcc fib.o -o fib回归正题,链接的时候下面三条任选一个执行即可
$ gcc fib.o -o fib --coverage$ gcc fib.o -o fib -lgcov$ gcc fib.o -o fib -fprofile-arcs应该会正常生成 fib
3. 运行程序 fib
$ ./fib
会生成 .gcda 文件,.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。
4. 生成 gcov 报告
$ gcov fib.c
生成的 fib.c.gcov 文件中就包含了代码覆盖的统计数据,数字代表了每行代码被执行的次数及行号,相信这个不难分析
-: 0:Source:fib.c -: 0:Graph:fib.gcno -: 0:Data:fib.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include <stdio.h> -: 2: -: 3:int fibonacci(int n); -: 4: 1: 5:int main () -: 6:{ -: 7: int fib; -: 8: int n; -: 9: 43: 10: for (n = 0; n <= 41; n++) { 42: 11: fib = fibonacci(n); 42: 12: printf("fibonnaci(%d) = %d\n", n, fib); -: 13: } -: 14: 1: 15: return 0; -: 16:} -: 17:1402817422: 18:int fibonacci(int n) -: 19:{ -: 20: int fib;1402817422: 21: if (n <= 0) { 267914296: 22: fib = 0; -: 23: }1134903126: 24: else if (n == 1) { 433494436: 25: fib = 1; -: 26: } -: 27: else { 701408690: 28: fib = fibonacci(n -1) + fibonacci(n - 2); -: 29: } -: 30:1402817422: 31: return fib; -: 32:} -: 33:1. 汇总覆盖率数据,使用已经生成的 .gcno .gcda 文件生成覆盖率数据
$ lcov -c -o fib.info -d .
简单解释一下三个选项
-c: lcov 的一个操作,表示要去捕获覆盖率数据
-o: 输出文件
-d: .gcno .gcda 所在的文件夹,注意这里有个“.”,是从当前文件夹中获取数据的
问题又来了,开始在 lcov 的过程中,碰到 Negative length 的问题,顺着提示找到 lcov 源码中的一处 $(length) ,之后并没有头绪为什么会是负值传入的,于是根据 sourceforge 上面的地址,发了一封邮件询问了一下,回信意思是我使用的 gcc 版本为 4.7.2,需要 lcov 1.10+ 版本支持,使用 1.09 或更低版本的 lcov 会出现这样的问题。于是到以下地址去下载了最新的 lcov
http://ltp.sourceforge.net/coverage/lcov.php
在 lcov 1.10 的 release notes 中写明了对 gcc 4.7+ 提供了支持。
2. 生成 html 格式的报告
$ genhtml fib.info -o fib_result
genhtml 是安装 lcov 时附带的,使用上面产生的 .info 文件生成报告,存放于 fib_result 文件夹中
没错,这里的报告并不只是一个文件,有好多存放在你 -o 指定的目录下,生成之后进入 fib_result 就可以看见念想很久的 index.html 了
这里再分享一下怎么从 terminal 用浏览器打开网页:
$ firefox index.html
- gcov lcov 覆盖c/c++项目入门
- C/C++代码覆盖工具gcov与lcov入门
- C/C++代码覆盖工具gcov与lcov入门
- gcov+lcov C代码覆盖率 初识
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- PostgreSQL C代码覆盖率测试(gcov, lcov)
- C/C++代码覆盖工具http://magustest.com/blog/whiteboxtesting/using-gcov-lcov/
- C/C++代码覆盖率工具:gcov和lcov的使用入门
- C/C++代码覆盖率工具:gcov和lcov的使用入门 .
- 代码覆盖工具gcov/lcov的使用
- Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
- GNU Toolchain —— (五)gcov与lcov入门
- CMake编译项目集成Gcov/Lcov代码覆盖率测试
- gcov lcov (一)
- gcov、lcov与genhtml
- gcov、lcov与genhtml
- gcov,lcov常见问题
- gcov 和 lcov
- nohup和&后台运行,进程查看及终止
- 例题6-10 UVA699 二叉树先序遍历
- 参数估计与非参数估计
- Gradle系列第(一)篇---Groovy语法初探
- Python 正则表达式匹配字符串中的http链接
- gcov lcov 覆盖c/c++项目入门
- Zookeeper设置开机启动
- C++ 高性能服务器网络框架设计细节
- 数据蒋堂 | 从SQL语法看集合化
- 【面向JS--闭包】
- JAVA远程debug
- laravel的启动过程解析 服务容器Ioc
- UE4材质之图像处理
- linux信号量 signal