可以通过 parasoft-instrumentation coverage 注释为特定函数禁用或启用覆盖率插桩:

  • // parasoft-instrumentation coverage off - 禁用覆盖率插桩。 
  • // parasoft-instrumentation coverage on - 重新启用覆盖率插桩。

禁用了覆盖率插桩的函数的元素(如行、判定等)与将不被计入可覆盖范围。

这两个注释都会影响位于同一文件(预处理前)中的函数定义,从包含相应注释的行之后开始。它们作用于整个函数(作为一个整体)——例如,如果放在函数内部,将只影响注释后面的函数定义。

在以下示例中,将为 f2()f3()f5()main() 函数禁用代码覆盖率插桩,为g()f1()f4() 启用代码覆盖率插桩。f4() 函数内的注释影响 f5()main() 函数,因为它们的定义放在该注释之后。C/C++test 将把该示例代码视为具有七个可覆盖行(g() 中一行,f1() 中两行,f4() 中四行)。

int g(int i) { return i+1; }

int f1(int a) {
    if (a >= 0) return +1;
    else return -1;
}

// parasoft-instrumentation coverage off

int f2(int a) {
    return g(a - 1) + g(a);
}

int f3(int a) {
    return a + 2;
}

// parasoft-instrumentation coverage on

int f4(int a, int b) {
    if (a == 3) {
        return b;
    } else {
        /* parasoft-instrumentation coverage off */
        int i = g(a+b);
        return i;
    }
}

int f5(int a) {
    return f3(a * 2);
}

int main() {
    f1(12);
    return 0;
}

parasoft-instrumentation coverage 结构可以在 //.../*...*/ 注释中使用。对于 /*...*/ 注释,整个结构必须与 /* 注释开始字符位于同一行。parasoft-instrumentation coverage 注释必须是代码行中唯一的结构才能被正确识别。

  • No labels