Gcov是进行代码运行的覆盖率统计的工具,它随着gcc的发布一起发布的,它的使用也很简单,需要在编译和链接的时候加上-fprofile-arcs -ftest-coverage生成二进制文件,gcov主要使用.gcno和.gcda两个文件,.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。gcda文件的生成需要先执行可执行文件才能生成。生成gcda文件之后执行命令gcov *.cpp就会在屏幕上打印出测试的覆盖率,并同时生成文件“*cpp.gcov”,然后用vi打开就可以看见哪行被覆盖掉了。

 

使用gcov进行代码覆盖率测试  

场景:Support.cpp Main.cpp Support.h Main调用Support.cpp里的函数
step1: 编译,链接
           g++ -c Support.cpp -ftest-coverage -fprofile-arcs -o Support.o          --->> Support.gcno Support.o
           g++ -c Main.cpp -ftest-coverage -fprofile-arcs -o Main.o               --->> Main.gcno Main.o
           g++ -ftest-coverage -fprofile-arcs Main.o Support.o -lgcov -o Main.sh  --->> Main.sh
step2: 运行,生成gcda数据
           ./Main.sh         --->>Main.gcda  Support.gcda
step3:生成覆盖率数据
           gcov -b Main.cpp   --->> Main.cpp.gcov                                   【实际需要gcno,gcda文件】
           gcov -b Support.cpp  --->>Support.cpp.gcov
           【备注】实际上到这里就可以看到覆盖率信息了,并且在调用gcov的时候已经会有部分信息

 

本人認為編譯時會產生與.cpp文件對應的.gcno文件。

編譯執行gcov版后,認為執行到的.cpp文件會生成與之對應的.gcda文件。

.gcda文件少於.gcno文件的部份可能是未執行到的.cpp文件