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