我只是在 gdb 中调试一个程序,不知何故我发现了一个我以前从未见过甚至听说过的新功能,一个拆分视图,除了给出命令外,我还可以查看和浏览代码:
https://i.stack.imgur.com/KIiiq.jpg
这是什么?我做了什么,或者更具体地说,我怎样才能再次获得这种分屏模式?这种模式是否有名称,或者我可以在某处阅读有关如何使用它的信息?
它被称为 TUI(不开玩笑)。例如以 gdbtui
或 gdb -tui
...
另请参阅 Ciro Santilli 的 this answer。据我所知,它在 2012 年不可用,但绝对值得一看。
您可以通过 push ctrl+x 和 ctrl+a 来动态触发它。
它有两种变体。
只看代码按
同时按 CTRL
X
,然后按 1
查看源代码和程序集
同时按“CTRL”“X”,然后按“2”
http://www.cs.fsu.edu/~baker/ada/gnat/html/gdb_23.html
https://i.stack.imgur.com/qPEwS.png
Also check out this amazing Github project.
GDB 仪表板
https://github.com/cyrus-and/gdb-dashboard
GDB 仪表板使用 official GDB Python API 并在 GDB 停止时打印您想要的信息,例如在 next
之后,如 the native display
command。
与 TUI:
更健壮,因为它只是打印到标准输出而不是将外壳置于更神奇的诅咒状态,例如:.inputrc 中的 vi 模式会导致问题:https://superuser.com/questions/180512/how-to-turn-off -gdb-tui/927728#927728 program stdout / stderr 破坏了你的界面:GDB in TUI mode: how to deal with stderr's interaction with the ui
.inputrc 中的 vi 模式导致问题:https://superuser.com/questions/180512/how-to-turn-off-gdb-tui/927728#927728
程序 stdout / stderr 破坏了你的界面:GDB in TUI mode: how to deal with stderr's interaction with the ui
从 Python 高度可配置:您可以选择要输出的内容以及每个部分的大小,具体取决于您正在调试的内容。最有用的视图已经实现:源代码、程序集、寄存器、堆栈、内存、线程、表达式……但是使用 GDB Python API 上公开的任何信息应该很容易扩展它。 TUI 只允许显示源、程序集和寄存器中的两个,仅此而已。当然,除非你想修改它的 C 源代码 ;-)
https://i.stack.imgur.com/mHC8f.png
我相信 GDB 应该提供开箱即用的设置并默认打开,这样会吸引更多用户。
哦,主要开发人员 Andrea Cardaci 反应迅速,非常棒。大赞。
另请参阅:How to highlight and color gdb output during interactive debugging?
您也可以使用命令“-”(破折号)从 gdb shell 启动它。不知道如何动态关闭它。
在 gdb 中键入 layout
作为命令,将显示拆分窗口。
当 GDB 处于标准模式时,使用 win
会自动切换到 TUI 模式。
TUI 模式的其他命令:
info win 列出并给出所有显示窗口的大小。
下一个重点 |上一页 |源代码 |汇编 |注册 | split 将焦点设置到命名窗口。此命令允许更改活动窗口,以便滚动键可以影响到另一个窗口。
阅读 here 形成更多帮助。
还有一个用于 GDB 的接口工具,称为 cgdb。即使有一些颜色突出显示。 "ESC" 切换到代码视图,"i" 切换回 gdb
https://i.stack.imgur.com/XBTEN.png
tui 模式显然受到了 emacs 的启发——当我点击 ^Xo 时偶然发现了它,它在 emacs 的拆分窗口之间切换——当我应该做的是切换到不同的程序时,我有时会心不在焉地点击它。无论如何,这导致了另一个尚未提及的功能,您可以使用 ^Xo 将光标从代码窗口(您可以滚动的地方)移动到命令行,反之亦然。
不定期副业成功案例分享
gdb
后也可以使用layout next