在 Visual Studio 中,如果单击调用堆栈中的条目,则会打开编辑器并向您显示该函数的源代码。gdb中是否有类似的可能?我在 gdb 中使用 tui(文本用户界面)。是否可以让 tui 在回溯中显示给定条目的源代码?
如果没有,那么您如何利用回溯中的信息?您是否手动打开文件并导航到正确的行?
当您gdb
在断点处以(在任何模式下)停止并且可以使用backtrace
或where
命令查看回溯时,使用up
和down
命令专注于回溯的不同功能(帧)。
您可以使用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
/d
和w
获取回溯。该模式记录在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 单键模式。永久退出此模式的唯一方法是键入
q
或C-x s
。
您也可以尝试一些带有 GUI(gnuddd
或KDbg)的调试器,或大多数 Linux IDE 中内置的任何其他 gdb 包装器(列表、wiki 列表:Eclipse、Netbeans、CLion、KDevelop、Code::Blocks、CodeLite,...)。它们都更现代,更便于调试。
要添加到 osgx 的答案,您还可以使用 egframe 7
转到标记为 #7 的框架,backtrace
而不仅仅是使用up
/ down
。