如何一次性在gdb中获得整个堆栈跟踪?

时间:2010-11-27 16:18:49

标签: gdb kernel

我正在调试内核,显然故障处理程序在ARM上运行的方式是它们在到达任何实际代码之前经过数百个的__pabt_usr层。无论如何,我正在通过仿真器远程执行此调试,并且逐位获取跟踪的速度很慢。有没有办法一次性取出整个东西?

编辑:反向打印堆栈跟踪也很有帮助。

1 个答案:

答案 0 :(得分:5)

我不知道是否可以给出完整的回溯,但你可以给'bt'一个数字参数来获得更多的帧:

(gdb) bt 10
#0  x () at test.c:4
#1  0x080483bf in x () at test.c:4
#2  0x080483bf in x () at test.c:4
#3  0x080483bf in x () at test.c:4
#4  0x080483bf in x () at test.c:4
#5  0x080483bf in x () at test.c:4
#6  0x080483bf in x () at test.c:4
#7  0x080483bf in x () at test.c:4
#8  0x080483bf in x () at test.c:4
#9  0x080483bf in x () at test.c:4
(More stack frames follow...)

这也适用于负数,它给出最外面的帧:

(gdb) bt -2
#122467 0x080483bf in x () at test.c:4
#122468 0x080483bf in x () at test.c:4

因此,如果您需要最后几帧,则可以使用负数。