问题描述
似乎gcov没有报告类方法作为可执行行的内联定义。示例:
It seems like gcov does not report inline definitions of class methods as executable lines. Example:
#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就可以了,我得到以下报告:
If I compile the above program with g++ -g -O0 -ftest-coverage -fprofile-arcs -o main main.cpp
, run it, and call gcov on it, I get the following report:
-: 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行被报告为不可执行,上面的方法是否正确报告执行一次?
Why is line 5 reported as non-executable, even though the method above was reported correctly as executed once?
更新
根据gcov文档(), -
表示不可执行行,而 #####
和<$
According to the gcov documentation (https://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html#Invoking-Gcov), -
denotes a non-executable line while #####
and ====
mark lines that can be executed but weren't.
推荐答案
gcov报告链接您的二进制文件后,从未有任何可能执行 Foo :: baz()
。
gcov is reporting that after linking your binary, there was never any possibility of Foo::baz()
being executed.
链接器完全删除了该函数,因此没有可执行文件是与该行关联的代码。
The linker completely removed that function, so no executable was code associated with that line anymore.
这篇关于为什么gcov将类的函数定义报告为不可执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!