我们如何确定回溯时有多少参数?

时间:2011-10-15 10:25:36

标签: linux gcc operating-system

GCC call proc

我已经知道调用过程如上所述,并且希望编写一些代码行来回溯所调用的函数。保存的%ebp链没问题。

但我怎么才能知道这些论点,以及它们的数量仅来自这个调用链? 我发现gdb做得很好,打印的东西如下:

> #4  0xf0100069 in test_backtrace (x=3) at kern/init.c:16
> #5  0xf0100069 in test_backtrace (x=4) at kern/init.c:16
> #6  0xf0100069 in test_backtrace (x=5) at kern/init.c:16
> #7  0xf01000ea in i386_init () at kern/init.c:39

这意味着它确切地知道每个函数参数是什么。它是如何实现的?

很多人。

1 个答案:

答案 0 :(得分:0)

GDB是一个符号调试器。它知道只有在用调试符号构建代码时才这样做,因为它通过查看C中的函数原型来完成它。尝试使用调试符号编译代码(在CFLAGS中丢失-g),你会看到gdb突然失去了这样做的能力......