我想跟踪所有已调用的用户定义函数(按顺序,最好使用输入参数)。有没有办法使用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,
答案 0 :(得分:1)
你需要对你的二进制文件运行某种形式的第三方工具,比如Quantify(IBM)或Callgrind,(或者像gprof上面提到的@Paul R)。他们将生成一个调用树,它将为您提供所需的信息,谷歌:"调用树C函数"例如,会显示许多可以链接到您的代码的好东西......
如果你想自己动手,你需要在每个函数的顶部添加一行来创建一个堆栈分配对象,你可以捕获ctor / dtor序列以了解你何时# 39; ve进入并退出该功能,然后保持"堆栈"这些生成你自己的调用树...很容易做到(单线程,复杂的多线程)...