为什么 gcc 4.1 + gcov 报告 100% 的分支覆盖率而更新的(4.4、4.6、4.8)报告“p = new class;”的 50%线?

问题描述 投票:0回答:2

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

p = new Class;

报告为 100% 分支机构覆盖率 <-- THIS IS OK for me.

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

[+ -] p = new Class; (50% branch coverage)
...<-- THIS IS a problem for covering 100% !!!

我可以为较新的 gcc 版本设置任何额外的选项,以便报告与 gcc 4.1 相同的分支覆盖率作为单行

p = new Class;

gcc g++ branch code-coverage gcov
2个回答
5
投票

解决了!

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

在普通块内,例如:

int main(void)
{
 ...
 ...
 [+ -] printf("Hello\n");
 ...
}

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

因为启用了异常处理!!!

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

-fno-异常

在 g++ 命令行中。

例子:

g++ -O0 --coverage -fno-exceptions -fno-inline ....

谢谢!


3
投票

如果您正在运行

--exclude-throw-branches
,另一个解决方案是使用
gcovr
。例如:

gcovr --exclude-throw-branches ...

这允许您仍然在代码中抛出异常,但排除所有异常生成的分支。 gcovr 常见问题解答

中的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.