How can I jump to a frame in a stack trace according to the function name in gdb?

和自甴很熟 提交于 2021-02-06 09:46:10

问题


I'm debugging a stack overflow due to infinite recursion. The program fails when the stack is 700 calls deep.

I want to jump to the frame in which the function was initially called. However, gdb shows me the stack trace from the top of the stack about 20 entries at a time, and I wonder if I can somehow skip straight to the calling function without looking through the stack trace to find its number.

To that end, I want to be able to jump to a stack frame based on its name instead of its number.

Can this be done in gdb?


回答1:


Two options:

  • up 200 will bring you up 200 frames
  • If you know the initial caller of the recursive routine, you can do f[rame] <caller-func> - this will jump to the frame of address caller-func.

See Frame Selection in the manual.




回答2:


You have to use bt with minus. It is similar to bt, but print first the outermost n frames.
For example:
bt -100

And it is likely you will see the frame that you need to inspect on the first or second screen.
Once insecting the stack trace using bt -100 helped me to fix a pboblem with a lot of recursive calls easily.

And then issue command
f <here the number of your frame you need to inspect>



来源:https://stackoverflow.com/questions/5688768/how-can-i-jump-to-a-frame-in-a-stack-trace-according-to-the-function-name-in-gdb

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!