工具介绍
所需工具有,gcc、gcov、lcov、genhtml。 gcc、gcov是gcc中的一部分。
lcov、genhtml需另外安装(安装lcov中包含了genhtml)。
实现步骤
- 编译目标文件时增加特殊参数
gcc -fprofile-arcs -ftest-coverage hello.c
编译之后,你会发现与平常不同,多生成了一个文件hello.gcno文件。
-
运行程序,执行测试用例
./a.out
会再生成一个文件,hello.gcda
.gcno和.gcda都是二进制文件,无法阅读。 -
用gcov生成覆盖率文件
gcov hello.c
注意gcov的参数是.c文件。
会生成一个hello.gcov文件。这是个文本文件,以文本方式打开可以直接阅读。
如果多次运行a.out可以看到覆盖次数会增加。 -
用lcov生成容易阅读的文件
.gcov文件虽然可读,但并不直观。
用lcov生成info文件:
lcov -d . -t hello o hello.info -b . -c
每个参数的的作用可查看man。
此时.cov文件消失了。生成了hello.info文件,但还是不容易阅读的。
hello.info文件可直接阅读,可以发现其中记录了源码路径。 -
用genhtml生成网页文件
genhtml -o result hello.info
genhtml工具是lcov工具集的一部分。 -
关于覆盖率合并
不同测试生成的info文件是可以合并的。使用lcov和-a参数。
lcov -a hello.info -a hello2.info -o hello-all.info
genhtml -o result hello-all.info
可见覆盖率已合并。