为什么gcc 4.1 + gcov报告100%分支覆盖率和更新(4.4,4.6,4.8)报告50%为"p = new class;" 线?

San*_*rez 6 gcc branch code-coverage g++ gcov

当gcc 4.1(使用gcov)下一行时:

p =新班级;

报告为100%分支覆盖< - 这对我来说没问题.

为什么使用gcc 4.4及更高版本的同一行报告为:

[+ - ] p =新班级; (50%分支机构覆盖率)...... < - 这是覆盖100%的问题!

我可以为较新的gcc版本设置任何额外的选项,以便将单行的gcc 4.1报告为相同的分支覆盖率为"p = new Class;".

提前致谢.

San*_*rez 5

解决了 !

我们有一些带或不带异常处理的 C/C++ 文件,因此 lcov/gcov 为每个代码块处理“异常处理”。

在普通块内,例如:

int main(void)
{
 ...
 ...
 [+ -] printf("Hello\n");
 ...
}
Run Code Online (Sandbox Code Playgroud)

gcov 报告 printf 行的“分支覆盖率”为 50% ---> 为什么?

因为异常处理已启用!

为了解决这个问题,指定:

-fno-例外

在 g++ 命令行中。

例子:

g++ -O0 --覆盖-fno-例外-fno-内联 ....

谢谢 !