当 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;
?
解决了!
我们有一些带有和没有异常处理的 C/C++ 文件,因此 lcov/gcov 为每个代码块处理“异常处理”。
在普通块内,例如:
int main(void)
{
...
...
[+ -] printf("Hello\n");
...
}
gcov 报告 printf 行的“分支覆盖率”为 50% ---> 为什么?
因为启用了异常处理!!!
为了解决这个问题,指定:
-fno-异常
在 g++ 命令行中。
例子:
g++ -O0 --coverage -fno-exceptions -fno-inline ....
谢谢!
如果您正在运行
--exclude-throw-branches
,另一个解决方案是使用gcovr
。例如:
gcovr --exclude-throw-branches ...
这允许您仍然在代码中抛出异常,但排除所有异常生成的分支。 gcovr 常见问题解答
中的更多信息