解释类对象的Gcov报告

时间:2014-01-16 16:32:11

标签: c++ class code-coverage gcov

我正在班级cashier上做代码覆盖,我的老师对报告的含义做了非常简短的教导,我认为这对于我的软件工程技能的发展非常重要,因此我需要你的建议关于以下gcov报告的解释。我将不胜感激任何有助于我理解gcov的链接或文章

由于

标头文件

#ifndef CASHIER_H
#define CASHIER_H
#include <string>
using namespace std;


class cashier 
{
public:

        void setID(string);
    string getID();

    void setPassword(string);
    string getPassword();

    void settries(int);
    int gettries();
        void increase_tries();

private:
    string ID;
    string Password;
    int tries;



};

#endif  /* CASHIER_H */

实施文件

#include "cashier.h"




void cashier::setID(string value)
{
    this->ID = value;
}

void cashier::setPassword(string value)
{

    this->Password = value;

}

string cashier::getID()
{
    return this->ID;
}

string cashier::getPassword()
{
    return this->Password;
}

void cashier::settries(int value)
{
    this->tries=value;
}
int cashier::gettries()
{
    return this->tries;
}
void cashier::increase_tries()
{
    this->tries = this->tries + 1 ;

}

我在命令提示符下键入以下命令,以便在类

上使用gcov
gcov -b cashier.gnco

我得到了以下结果A

File 'cashier.cpp'
Lines executed:100.00% of 18 //what does the 18 mean 
No branches                  //what does no branches mean
Calls executed:100.00% of 4   // what does 4 mean ??
cashier.cpp:creating 'cashier.cpp.gcov'

File '/usr/include/c++/4.4/bits/basic_string.h' // Where did this come from ??
Lines executed:0.00% of 2
No branches
Calls executed:0.00% of 1
/usr/include/c++/4.4/bits/basic_string.h:creating 'basic_string.h.gcov

我输入以下命令

gcov -f cashier.gnco

我得到了以下结果B

Function '_ZN7cashier8settriesEi' // does this refer to the function :settries
Lines executed:100.00% of 3       // my teacher doesnt think so but i feel it refer
                                  //to it , who is correct??

Function '_ZN7cashier8gettriesEv'
Lines executed:100.00% of 2

Function '_ZN7cashier14increase_triesEv'
Lines executed:100.00% of 3

Function '_ZN7cashier11getPasswordEv'
Lines executed:100.00% of 2

Function '_ZN7cashier5getIDEv'
Lines executed:100.00% of 2

Function '_ZNSsaSERKSs'
Lines executed:0.00% of 2

Function '_ZN7cashier11setPasswordESs'
Lines executed:100.00% of 3

Function '_ZN7cashier5setIDESs'
Lines executed:100.00% of 3

File 'cashier.cpp'
Lines executed:100.00% of 18
cashier.cpp:creating 'cashier.cpp.gcov'

File '/usr/include/c++/4.4/bits/basic_string.h'
Lines executed:0.00% of 2
/usr/include/c++/4.4/bits/basic_string.h:creating 'basic_string.h.gcov'

我对结果A的提问

1) 18 的含义及其在Lines executed:100.00% of 18

中的意义

2)no branches意味着什么

3) 4 的含义及其在Calls executed:100.00% of 4

中的意义

4)整个段落意味着什么

 File '/usr/include/c++/4.4/bits/basic_string.h'
    Lines executed:0.00% of 2
    No branches
    Calls executed:0.00% of 1
    /usr/include/c++/4.4/bits/basic_string.h:creating 'basic_string.h.gcov

我对结果B的提问

1)所有函数名称等::'_ ZN7cashier8settriesEi'几乎匹配收银员函数名称等:void settries(int),我认为它指的是相同的函数,但我的老师感觉不然,谁是对的吗?

2)函数Lines executed:100.00% of 3中3的含义是什么:'_ ZN7cashier8settriesEi'

2 个答案:

答案 0 :(得分:3)

结果A:

  1. 启动程序后执行了18行代码(与cashier.cpp相关)。
  2. 您的代码没有任何条件。
  3. 从4个仪表(与cashier.h相关)执行了4行
  4. 某些std :: string行成为了coverage的一部分。您应该从coverage报告(gcov -e)
  5. 中排除std :: string

    结果B:

    1. 从3个仪表执行了3行。
    2. P.S。  如果您对gcov感兴趣,可以安装lcov - 它是gcov报告中的gui表示。

答案 1 :(得分:2)

_ZN7cashier8settriesEi这样的名称是mangled名称,在这种情况下它们肯定会引用cashier::settries()之类的函数。

Lines executed只是源文件中在程序运行期间经历的行数。您应该查看详细结果(请参阅example)以检查哪些是实际的可执行文件已执行行。

No branches表示代码中没有像if语句那样的决策点。

Calls executed是从该文件到该文件的函数的函数调用。

void cashier::setID(string value)
{
    this->ID = value; // call to string::operator=()
}

void cashier::setPassword(string value)
{
    this->Password = value; // call to string::operator=()
}

string cashier::getID()
{
    return this->ID; // call to copy-constructor of string
}

string cashier::getPassword()
{
    return this->Password; // call to copy-constructor of string
}

这四种方法都在调用std::string的方法,尽管它没有明确写出来。 (请参阅我对上述代码的评论。)  其他三种方法操纵基本类型int的变量,这不需要函数调用。