我已经知道调用过程如上所述,并且希望编写一些代码行来回溯所调用的函数。保存的%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
这意味着它确切地知道每个函数参数是什么。它是如何实现的?
很多人。
答案 0 :(得分:0)
GDB是一个符号调试器。它知道只有在用调试符号构建代码时才这样做,因为它通过查看C中的函数原型来完成它。尝试使用调试符号编译代码(在CFLAGS中丢失-g),你会看到gdb突然失去了这样做的能力......