如何根据gdb中的函数名跳转到堆栈跟踪中的帧?

时间:2011-04-16 18:52:51

标签: gdb stack-trace

由于无限递归,我正在调试堆栈溢出。当堆栈深度为700次调用时,程序将失败。

我想跳转到最初调用该函数的帧。但是,gdb一次向我显示堆栈顶部的堆栈跟踪大约20个条目,我想知道我是否能以某种方式直接跳到调用函数而不查看堆栈跟踪以找到它的编号。

为此,我希望能够根据其名称而不是其编号跳转到堆栈框架。

可以在gdb中完成吗?

2 个答案:

答案 0 :(得分:18)

你必须使用bt减号。它类似于bt,但首先打印最外面的n帧。
例如:
bt -100

您可能会在第一个或第二个屏幕上看到需要检查的帧。
一旦使用bt -100对堆栈跟踪进行了检索,就可以帮助我轻松修复带有大量递归调用的pboblem。

然后发出命令
f <here the number of your frame you need to inspect>

答案 1 :(得分:17)

两个选项:

  • up 200将为您带来200帧
  • 如果您知道递归例程的初始调用者,则可以执行f[rame] <caller-func> - 这将跳转到地址caller-func的框架。

请参阅手册中的Frame Selection