gpt4 book ai didi

c++ - 分支覆盖率低,尤其是在使用第 3 方库时。前 boost

转载 作者:行者123 更新时间:2023-11-30 03:30:53 26 4
gpt4 key购买 nike

我在理解 C++ 中的分支覆盖率时遇到问题。即使对于一个简单的程序,分支覆盖率也是 50%。当我使用 boost 时,分支覆盖率低于 20%。

enter image description here

有人能解释一下为什么会这样吗?我正在使用

-fno-exceptions -g -O0 -fprofile-arcs -ftest-coverage -fPIC -Wall

编译器标志和 gcovr 用于生成报告。我也试过 lcov 结果完全一样

最佳答案

这只是一般的 C++ 编译器怪异现象。 gcovr 和 lcov 都依赖于 GCC 在目标代码中测量的覆盖率数据,并且编译器似乎在那里插入了一些分支语句。

我看过 disassembly of the generated code on Godbolt ,并且编译器确实在 __static_initialization_and_destruction_0 部分下插入了两条 jne 分支指令。当您使用 -O1 编译时,这些消失。

您应该为覆盖率测量选择哪个优化级别有点棘手。您启用的优化越多,将覆盖率测量与特定源代码行联系起来就越困难,因为编译器可能会优化掉很多代码。但是对于 C++,一些优化是预期的,并且当编译器产生不必要的代码时它会令人困惑。就像这里的情况一样。无论您选择什么级别,您通常都无法实现完整的分支机构覆盖。

gcov 文档还讨论了 using gcov with GCC optimization . gcov 被 gcovr 用于处理原始覆盖数据,因此具有相同的局限性。

但是,gcovr 执行一些后处理,它可以排除不携带源代码的行上的分支。在这里,当给定 --exclude-unreachable-branches 标志时,这将忽略 } 行上的任何分支。

关于c++ - 分支覆盖率低,尤其是在使用第 3 方库时。前 boost ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com