使用gdb中的函数调用堆栈进行导航

The*_*ere 4 debugging gdb tui gnu

在Visual Studio中,如果单击调用堆栈中的条目,则会打开编辑器并显示该函数的源代码.gdb中有类似的东西吗?我在gdb中使用tui(文本用户界面).是否可以在回溯中为tui显示给定条目的源代码?

如果没有,那么如何利用回溯中的信息呢?您手动打开文件并导航到正确的行吗?

osg*_*sgx 8

当您gdb在断点处停止(在任何模式下)并且可以使用backtracewhere命令查看回溯时,使用updown命令可以专注于回溯的不同功能(帧).

您可以使用up 2上两帧.list命令将显示当前帧周围的源行.

我想,tui会在up/ downcommands 之后改变当前显示的函数/寄存器; 在tui中没有点击式回溯(tui中是否有鼠标支持?).只有tui的文档窗口是 https://sourceware.org/gdb/onlinedocs/gdb/TUI-Commands.html

源,汇编和命令窗口.

有些键可以在TUI中更改当前帧,但不能在正常的TUI模式下(https://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html),因此您可以使用gdb的文本命令.

还有"TUI单键模式",Ctrl-x s由此模式激活,并且在此模式下有上/下命令:u/ dw获得回溯.该模式记录在https://sourceware.org/gdb/onlinedocs/gdb/TUI-Single-Key-Mode.html#TUI-Single-Key-Mode:

25.3 TUI单键模式

 w    where
 u    up
 d    down
 r    run
 s    step
 n    next
 c    continue
 f    finish
 q    exit the SingleKey mode.
 v    info locals
Run Code Online (Sandbox Code Playgroud)

其他键暂时切换到gdb命令提示符.按下的键被插入到编辑缓冲区中,因此可以在不与TUI SingleKey模式交互的情况下键入大多数gdb命令.输入命令后,将恢复TUI SingleKey模式.永久离开此模式的唯一方法是键入qC-x s.

您也可以尝试使用GUI(gnudddKDbg)或大多数Linux IDE中内置的任何其他gdb包装器(列表,维基列表:Eclipse,Netbeans,CLion,KDevelop,Code :: Blocks,CodeLite,...).它们都更加现代,便于调试.


Kei*_*h M 7

要添加到 osgx 的答案中,您还可以使用 egframe 7转到标记为 #7 的帧,backtrace而不是仅使用up/ down