gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:25:34 25 4
gpt4 key购买 nike

我想跟踪所有已调用的用户定义函数(按顺序,最好使用输入参数)。有没有办法使用 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,

最佳答案

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

如果你想自己滚动,你需要在你的每个函数的顶部添加一行,它创建一个堆栈分配的对象,你可以捕获 ctor/dtor 序列以知道你何时输入并退出该函数,然后维护这些函数的“堆栈”以生成您自己的调用树...非常容易做到(在单线程中,在多线程中复杂)...

关于c++ - 使用 gdb 跟踪所有用户定义的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4182957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com