gpt4 book ai didi

c++ - 为什么 gcov 将类内函数定义报告为不可执行?

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

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() 永远不可能被执行。

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

关于c++ - 为什么 gcov 将类内函数定义报告为不可执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321099/

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