【发布时间】:2011-05-10 03:18:09
【问题描述】:
我想跟踪所有已调用的用户定义函数(按顺序,最好使用输入参数)。有没有办法使用 gdb 做到这一点?或者是否有更好的免费/开源应用程序来完成这项工作? 请注意,我只想打印用户定义的函数调用。
例如:
int abc(int a, char b) {
return xyz(a+b);
}
int xyz(int theta) {
return theta * theta;
}
我需要以下输出:
abc(a, b); xyz(θ);
我的代码库非常庞大,并且被编译成多个部分,因此我想避免使用需要我在启用某些选项的情况下再次编译源代码的工具。
PS:我发现有一些方法可以在 gdb 中定义函数并将函数名称作为参数传递以找出调用跟踪。但在我的情况下,代码库非常庞大,我从它开始,所以我什至不确定所有函数都被称为什么等等。在这里列出所有函数是不切实际的。
TIA,
【问题讨论】:
-
你明白现在每秒调用十亿个函数是很可能的吗?这将转化为每秒几千兆字节的输出。部分问题可能在于您的“用户定义”限制;第三方库也是用户定义的。也许您的意思是“在我自己的源代码中定义的函数” - 您可以将日志记录限制在您自己的
.o文件中定义的函数。 -
您可能想查看
gprof而不是gdb -
据我记得,唯一可以让您设置一些断点选择的 gdb 命令是 rbreak,它会在匹配正则表达式的函数上中断。您需要的断点是否适合 - 例如一个通用的命名空间前缀?