参考文章
gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就不需要再次安装了。
gcov能够生成代码覆盖信息,但是不够直观,因此需要结合lcov,gcovr
等前端图形工具才能实现统计数据图形化。
借助lcov
直观展示覆盖率,主要特点有:
(1)预处理前,加上参数-fprofile-arcs -ftest-coverage
,会生成hello.gcno
文件
gcc -fprofile-arcs -ftest-coverage hello.c -o hello
生成文件如下:
hello hello.c hello.gcno
(2)gcov收集代码运行信息
运行./hello
产生hello.gcda
文件,其中包含了代码基本块和狐跳变次数统计信息
./hello
在运行./hello
之前运行gcov hello.c
命令,会产生原始的代码覆盖率,因为没有数据文件 hello.gcda
,所以此时hello.c.gcov
统计数据的覆盖率为0。
(3) 生成gcov代码覆盖率报告 (生成的文本统计结果和带 line-count 标注的源代码)
gcov hello.c
此时产生的hello.c.gcov
中包含了代码覆盖率数据,其数据的来源为hello.gcda
。
其中#####
表示未运行的行; 每行前面的数字表示行运行的次数
(4)lcov生成较正式的 HTML 报告:
上述生成的.c.gcov文件可视化成都较低,需要借助lcov,genhtml工具直接生成html报告。
$ lcov -c -d . -o hello.info # 转换覆盖率信息
$ genhtml hello.info -o ./output # 生成 html文件
-c
生成覆盖率信息 -d
目录 .
当前目录 -o
生成目标文件
可能出现的出错:可能会提示out of memory,原因是locv版本过低。
可以看到output目录下有index.html文件
使用浏览器打开html文件,即可查看覆盖率报告