6

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

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

4

2 回答 2

12

当您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 单键模式。永久退出此模式的唯一方法是键入qC-x s

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

于 2016-07-19T02:07:51.303 回答
8

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

于 2016-07-20T23:52:33.623 回答