gcc编译选项-fprofile-arcs -ftest-coverage之代码覆盖率

前言

gcov是在代码运行时统计代码覆盖率的工具,随着gcc一起发布的。
它的使用很简单,需要在编译和链接时增加-fprofile-arcs -ftest-coverage生成二进制文件。
gcov主要使用.gcno和.gcda两个文件。
.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。
参考:传送门

gcc编译选项-fprofile-arcs -ftest-coverage之代码覆盖率_第1张图片

实际测试

上一个简单的测试代码vector.cpp:

#include 
#include 
#include 
using namespace  std;
double average(const vector &array){
    double sum = 0;
    for(int i = 0;i array = {2.234123412,143213.22342,3124132.41};
    for(auto i= array.begin();i!=array.end();i++){
        cout.width(16);
        cout<

(1)编译时加上-fprofile-arcs -ftest-coverage选项。

g++ -fprofile-arcs -ftest-coverage vector.cpp

(2)运行 ./a.out
gcc编译选项-fprofile-arcs -ftest-coverage之代码覆盖率_第2张图片
编译后,多了.gcno文件,运行后多了.gcda文件。
(3)运行gcov

gcov vector.cpp

gcc编译选项-fprofile-arcs -ftest-coverage之代码覆盖率_第3张图片
Lines executed:70.59% of 17,共17行,覆盖率70.59%。

vi vector.cpp.gcov

gcc编译选项-fprofile-arcs -ftest-coverage之代码覆盖率_第4张图片
以上代码中,空行为-,前面数字是执行的次数,#####是未被执行的行。课件average函数未被执行。

你可能感兴趣的:(linux)