使用gdb跟踪所有用户定义的函数调用

时间:2010-11-15 09:24:49

标签: c++ c gdb trace

我想跟踪所有已调用的用户定义函数(按顺序,最好使用输入参数)。有没有办法使用gdb做到这一点?或者是否有更好的免费/开源应用程序来完成这项工作? 请注意,我只想打印用户定义的函数调用。

例如:

int abc(int a, char b) {
  return xyz(a+b);
}

int xyz(int theta) {
  return theta * theta;
}

我需要以下输出:

abc(a,b); XYZ(THETA);

我的代码库非常庞大,并且编译成各个部分,因此我想避免使用一个工具,它需要我再次编译我的源代码并启用一些选项。

PS:我发现有一些方法可以在gdb中定义函数,并将函数名称作为params传递,以找出调用跟踪。但在我的情况下,代码库非常庞大,我开始使用它,所以我甚至不确定所有函数的调用等。在这里列出所有函数是不切实际的。

TIA,

1 个答案:

答案 0 :(得分:1)

你需要对你的二进制文件运行某种形式的第三方工具,比如Quantify(IBM)或Callgrind,(或者像gprof上面提到的@Paul R)。他们将生成一个调用树,它将为您提供所需的信息,谷歌:"调用树C函数"例如,会显示许多可以链接到您的代码的好东西......

如果你想自己动手,你需要在每个函数的顶部添加一行来创建一个堆栈分配对象,你可以捕获ctor / dtor序列以了解你何时# 39; ve进入并退出该功能,然后保持"堆栈"这些生成你自己的调用树...很容易做到(单线程,复杂的多线程)...