由于无限递归,我正在调试堆栈溢出。当堆栈深度为700次调用时,程序将失败。
我想跳转到最初调用该函数的帧。但是,gdb一次向我显示堆栈顶部的堆栈跟踪大约20个条目,我想知道我是否能以某种方式直接跳到调用函数而不查看堆栈跟踪以找到它的编号。
为此,我希望能够根据其名称而不是其编号跳转到堆栈框架。
可以在gdb中完成吗?
答案 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。