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

前言

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

在这里插入图片描述

实际测试

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

#include <iostream>
#include <vector>
#include <iomanip>
using namespace  std;
double average(const vector<double> &array){
    double sum = 0;
    for(int i = 0;i<array.size();i++)
        sum+=array[i];

    return sum/array.size();
}

int main(){

    vector<double> array = {2.234123412,143213.22342,3124132.41};
    for(auto i= array.begin();i!=array.end();i++){
        cout.width(16);
        cout<<setprecision(16)<<*i<<"  ";
    }
    cout<<endl;
    for(auto m:array){
        cout.width(16);
        cout<<setprecision(16)<<m<<"  ";
    }
    cout<<endl;
    return 0;
}

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

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

(2)运行 ./a.out
在这里插入图片描述
编译后,多了.gcno文件,运行后多了.gcda文件。
(3)运行gcov

gcov vector.cpp

在这里插入图片描述
Lines executed:70.59% of 17,共17行,覆盖率70.59%。

vi vector.cpp.gcov

在这里插入图片描述
以上代码中,空行为-,前面数字是执行的次数,#####是未被执行的行。课件average函数未被执行。

猜你喜欢

转载自blog.csdn.net/u014470361/article/details/103447678