为什么gcov报告类内函数定义为不可执行的?

Why does gcov report in-class function definitions as not executable?

本文关键字:可执行 定义 函数 gcov 报告 为什么      更新时间:2023-10-16

gcov似乎没有将类方法的内联定义报告为可执行行。例子:

#include <iostream>
struct Foo {
  void bar() {}
  void baz() {}
};
int main() {
  Foo foo;
  foo.bar();
}

如果我用g++ -g -O0 -ftest-coverage -fprofile-arcs -o main main.cpp编译上面的程序,运行它,并在它上面调用gcov,我得到以下报告:

        -:    0:Source:main.cpp
        -:    0:Graph:main.gcno
        -:    0:Data:main.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:#include <iostream>
        -:    2:
        -:    3:struct Foo {
        1:    4:  void bar() {}
        -:    5:  void baz() {}
        -:    6:};
        -:    7:
        1:    8:int main() {
        -:    9:  Foo foo;
        1:   10:  foo.bar();
        4:   11:}

为什么第5行报告为不可执行,即使上面的方法被正确地报告为执行一次?

根据gcov文档(https://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html#Invoking-Gcov), -表示不可执行的行,而#####====表示可以执行但不能执行的行。

gcov报告在链接二进制文件后,没有任何Foo::baz()被执行的可能性。

链接器完全删除了该函数,因此不再有与该行相关的可执行代码。

相关文章: