为什么gcov报告类内函数定义为不可执行的?
Why does gcov report in-class function definitions as not executable?
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()
被执行的可能性。
链接器完全删除了该函数,因此不再有与该行相关的可执行代码。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake 添加和删除宏定义以编译共享库/可执行文件
- 运行自定义可执行文件,QProcess 立即退出,退出代码为 1
- 我可以定义一个(键入的)常数,该常数确定不占据可执行文件中的空间
- 如何在可执行文件中查看宏定义值
- 生成文件问题(体系结构x86_64的未定义符号:"_main",引用自:主可执行文件的隐式入口/启动)
- cusparse功能的多个定义错误在链接可执行文件中的cuda文件时
- 如何使用在Visual Studio可执行项目中定义的类
- QT创建者:如何为自定义小部件生成库和测试可执行文件
- 将整个类定义放在".h"中是否会使可执行文件更大?
- 获取cmake可执行路径以在自定义命令上运行它
- c++链接器如何选择将类的哪个定义链接到可执行文件中
- 在.so内部定义的extern变量和可执行引线执行未定义的行为
- 建筑x86_64的未定义符号:... "_main" ,引用自:主可执行文件的隐式入口/启动
- JNI共享库中未定义的符号,可执行文件正在工作
- 如何在自定义shell中检测脚本文件与可执行文件
- 如何在没有资源编译器的情况下将自定义窗口的资源添加到可执行文件中?
- 在 mac 上的 gnu/clang 编译器中定义相对于可执行文件的框架路径
- 如何使用自定义注册系统注册dll,并查看导入dll的可执行文件的PE