2016-09-07 83 views
0

我正在用C++编写一些测试,并且我正在使用gcov(实际上lcov,但我认为它在旁边)来获取有关覆盖范围的信息。在运行时禁用gcov覆盖

有没有办法在运行时禁用信息记录? E.G. :

bool myTest() { 
    ObjectToTest obj; 

    /* Enable gcov... */ 

    obj.FunctionToTest(); 

    /* ...Disable gcov */ 

    if(obj.GetStatus() != WHATEVER) 
     return false; 
    else 
     return true; 
} 

在这种情况下,我想对gcov显示为“覆盖”只是FunctionToTest但留下ObjectToTest构造的getStatus和“发现”。

提前致谢!

+0

不,这不是真的有可能,因为它是插入它时,在编译生成的代码生成的数据的指令编译器。一旦仪表代码在那里,那么就不可能禁用它。 –

回答

0

不,在gcov的情况下,我们没有任何这样的选项。

我已经在一些覆盖工具中看到了这样的选项,例如直接通过直接检测源代码工作的三叶草。

除了解决您的问题之外,还会将该部分代码写入不同的源文件,并通过将其包含在所需的源文件中进行调用。
我的建议是这样,因为当您稍后使用LCOV或GCOVR生成覆盖率报告时,它们都会提供一个选项,通过将覆盖率报告传递给特定的标志来排除指定的文件。

LCOV:

-r tracefile pattern 
    --remove tracefile pattern 
      Remove data from tracefile. 

GCOVR:

-e EXCLUDE, --exclude=EXCLUDE 
        Exclude data files that match this regular expression