gcov是在代码运行时统计代码覆盖率的工具,随着gcc一起发布的。它的使用很简单,需要在编译和链接时增加-fprofile-arcs -ftest-coverage生成二进制文件。gcov主要使用.gcno和.gcda两个文件,.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。
以测试samp3为例:有文件samp3.cpp、samp3.h、samp3_test.cpp(单元测试脚本)
1.编译并链接samp3.cpp、samp3_test.cpp时增加参数-fprofile-arcs -ftest-coverage
除了生成可执行文件test3之外,还生成了samp3.gcno和samp3_test.gcno二进制文件。
命令:g++ samp3.cpp samp3_test.cpp libgmock.a -fprofile-arcs -ftest-coverage -lpthread -o test3
2.执行test3文件可生成*.gcda二进制文件
3.执行命令gcov *.cpp
生成gcda文件之后执行命令gcov *.cpp就会在屏幕上打印出测试的覆盖率,并同时生成文件“*.cpp.gcov”,然后用vi打开就可以看见哪行被覆盖掉了
如:执行gcov samp3.cpp即打印出samp3文件的代码覆盖率为100%,同时生成文件samp3.cpp.gcov
4.vi *.cpp.gcov打开文件查看哪行被覆盖掉了
如vi samp3.cpp.gcov可看到第7、8行被覆盖了11次,除注释空行外所有代码均被覆盖到了,覆盖率100%。
5.github下载lcov源码,直接make install 安装
地址:https://github.com/linux-test-project/lcov.git
注:1.从windows上烤到linux上文件会存在CRLF,需要使用dos2unix *转行成unix文件
2.没有权限则使用sudo make install
网友评论