在 运行 时间禁用 gcov 覆盖

disable gcov coverage at run-time

我正在用 C++ 编写一些测试,我正在使用 gcov(实际上是 lcov,但我认为它不重要)来获取有关覆盖率的信息。

有什么方法可以在运行时禁用信息记录吗? 例如。 :

bool myTest() {
    ObjectToTest obj;

    /* Enable gcov... */

    obj.FunctionToTest();

    /* ...Disable gcov */

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

在这种情况下,我希望 gcov 仅显示为 "covered" FunctionToTest,但保留 ObjectToTest 构造函数和 GetStatus "uncovered".

提前致谢!

不,对于 gcov,我们没有任何此类选项。

我在一些覆盖工具(如 clover)中看到了这样的选项,不过它通过直接检测源代码来工作。

除了您的问题的解决方案之外,将那部分代码写入不同的源文件,然后通过包含它在您想要的源文件中调用它。
我之所以这样建议,是因为当您稍后使用 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

虽然我同意@VikasTawniya 所说的,但您也可以在测试代码中模拟您不喜欢跟踪的功能。

 #ifdev NO_COV
 #include mock.h // mock of obj.FunctionToTest(); does nothing
 #else 
 #include real.h // real implementation of obj.FunctionToTest();
 #endif

现在您的覆盖结果不会因 obj.FunctionToTest()

的调用而受到破坏