gpt4 book ai didi

c - 是否有实用程序可以打印 C 程序的函数调用序列?

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:48 24 4
gpt4 key购买 nike

我正在尝试在用 C 编写的 DBMS 上运行一些配置文件,主要是 postgres 二进制文件。我希望能够使用实用程序打印出程序进行的函数调用序列。作为一个简单的例子,以这个程序为例:

void func1 () { 
printf("x\n");
}

void func2 () {
printf("y\n");
func1();
}

int main () {
func2();
func1();
return 0;
}

当使用这个“实用程序”编译和执行时,我希望看到类似这样的内容:

-> main
-> func2
-> func1
-> func1
<-

此外,我无法修改源代码或 makefile,但是 -g 已启用。

我知道我过去使用过一个分析器来做类似的事情,但我不记得是哪一个了。我进行了一些谷歌搜索,但找不到不需要我更改源代码或 makefile 的好的解决方案。

我可以使用什么分析工具来完成此任务?或者一个不存在?

谢谢。

最佳答案

我知道没有工具可以直接执行此操作,但您可以使用 GDB breakpoint commands获取堆栈跟踪以及 regex break中断您感兴趣的功能。此时您应该能够对其进行后处理以获得所需格式的输出。

例如,您可以这样做(为简洁起见进行了编辑):

$ gdb ./program
(gdb) rbreak program.c:.
...
(gdb) commands
>silent
>bt
>cont
>end
(gdb) run
...
#0 main () at program.c:22
...
#0 foo (number=113383) at program.c:4
#1 main () at program.c:22
...
Program exited normally.
(gdb)

关于c - 是否有实用程序可以打印 C 程序的函数调用序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543007/

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