GCOV函数不执行,但行执行
gcov function is not executed but lines are
我一直在使用gcov来检查代码覆盖率。我现在得到一个奇怪的结果,某些函数被列为未执行,但函数中的行被列为已执行。
LCOV输出:
13 0 : f<double>& operator*=(f<double>& lhs, const double& rhs)
14 : {
15 9 : // Some code...
16 0 : return lhs;
17 : }
GCOV输出:
#####: 13: f<double>& operator*=(f<double>& lhs, const double& rhs)
-: 14: {
9: 15: // Some code...
#####: 16: return lhs;
-: 17: }
当行被列为未执行时,如何将函数列为未执行?这可能是 GCC 优化的工件吗?
编辑 1:
G++/gcov 版本:4.9.2
LCOV 版本:1.11
编辑2:
遵守-O2
会产生奇怪的行为。但是,使用 -O1
进行编译会将####
更改为9
您应该在未优化的代码上运行gcov
。这将为您提供输出,可能由 lcov 解释,这将向您保证所有行都已运行。
然后,您可以针对发布版本进行优化。
零只是表示gcov
没有代码行的数据。 发生这种情况只是因为 gcc 没有方便的方法来检测 — 修改程序以添加计数器(如函数的条目(。 例如,如果优化程序删除或组合附近函数中的类似语句,则没有什么可计算的。
根据手册:
格式为
execution_count:line_number:source line text
当命令行选项请求时,每行可能会附加块信息。对于不包含代码的行,execution_count
‘-’
。未执行的行标记为‘#####
' 或‘====’
,具体取决于它们是可以通过非异常路径还是只能通过异常路径(如异常处理程序(访问C++分别访问。
延伸阅读:
- 为了提高覆盖范围,您对解释 gcov 输出有什么技巧?
- 解释 GCAV 输出以识别基本块
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- GCOV函数不执行,但行执行
- 为什么gcov报告类内函数定义为不可执行的?