初始化分支机构的总体覆盖范围

时间:2019-04-09 16:51:01

标签: c++ c++11 gcc code-coverage gcov

我正在构建一个tool,它实际上是lcov的替代方案。我试图使它生成的默认分支覆盖范围内的噪声尽可能小。分支噪声的一个来源似乎是初始化列表:

#include <vector>
#include <string>

using namespace std;

struct A {
   vector<string> reference_tokens;
};

int main() {
  A a;

  vector<string> rt = {"a", "b", "c"};

  a.reference_tokens = {rt[0]};
  return 0;
}

在生成此代码段的覆盖范围时,我得到:

 9                 :            : struct A {
10                 :            :    vector<string> reference_tokens;
11                 :            : };
12                 :            : 
13                 :          1 : int main() {
14                 :          2 :   A a;
15                 :            : 
16 [ +  - ][ +  - ]:          6 :   vector<string> rt = {"a", "b", "c"};
   [ +  - ][ +  - ]
17                 :            : 
18 [ +  - ][ +  - ]:          2 :   a.reference_tokens = {rt[0]};
   [ +  + ][ -  - ]
19                 :          1 :   return 0;
20                 :            : }

现在,我意识到GCC插入了用于处理异常的分支。但是,如果我过滤掉异常分支,则仍然有:

 9                 :            : struct A {
10                 :            :    vector<string> reference_tokens;
11                 :            : };
12                 :            : 
13                 :          1 : int main() {
14                 :          2 :   A a;
15                 :            : 
16                 :          6 :   vector<string> rt = {"a", "b", "c"};
17                 :            : 
18 [ +  + ][ -  - ]:          2 :   a.reference_tokens = {rt[0]};
19                 :          1 :   return 0;
20                 :            : }

我不确定这四个分支[ + + ][ - - ]是干什么的。根据gcov,它们不是特殊的分支,似乎总是1:1。例如,更大的初始化列表将导致[ + + ][ + + ][ + + ][ - - ][ - - ][ - - ]非异常分支。

所以我的问题是...这些分支是什么?可以到达吗?是否可以安全消除噪音?

0 个答案:

没有答案
相关问题