最近我正在尝试修改 GCC 和 gcov 来收集程序的执行顺序。众所周知,gcc 会在基本块之间的 arcs 上检测代码,以计算 arc 的执行次数。所以我在弧上检测了一个函数,该函数将打印出该弧的编号,因此我可以收集程序执行顺序。它适用于 x86 和 x86_64 上的 c 程序,也适用于 x86 的 c++ 程序。但是对于 x86_64 上的 c++ 程序,程序会因段错误而崩溃。编译没有问题。我使用的操作系统是 CentOS 6.4。gcc 的版本是 3.4.5。有人有什么建议吗?
示例程序:
#include <iostream> using namespace std; int main(){cout<<"hello world"<<endl;}
如果我在 x86_64 模式下编译程序。当遇到 cout CALL 时,程序因段错误而崩溃。