我正在班级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 ;
}
我在命令提示符下键入以下命令,以便在类
上使用gcovgcov -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'
答案 0 :(得分:3)
结果A:
结果B:
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
的变量,这不需要函数调用。