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

时间:2016-07-19 01:37:35

标签: debugging gdb gnu tui

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

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

2 个答案:

答案 0 :(得分:5)

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

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

我认为,tui会在up / down命令之后更改当前显示的函数/寄存器;在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
     

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

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

答案 1 :(得分:3)

要添加到osgx的答案中,您还可以使用例如frame 7转到backtrace标记为#7的框架,而不只是使用up / down