ChatGPT解决这个技术问题 Extra ChatGPT

带代码的 gdb 拆分视图

gdb

我只是在 gdb 中调试一个程序,不知何故我发现了一个我以前从未见过甚至听说过的新功能,一个拆分视图,除了给出命令外,我还可以查看和浏览代码:

https://i.stack.imgur.com/KIiiq.jpg

这是什么?我做了什么,或者更具体地说,我怎样才能再次获得这种分屏模式?这种模式是否有名称,或者我可以在某处阅读有关如何使用它的信息?

快速参考:您可以使用 Cx Ca、Cx a 或 Cx A 中的任何一个退出此模式。请参阅 this question

0
0xC0000022L

它被称为 TUI(不开玩笑)。例如以 gdbtuigdb -tui ...

另请参阅 Ciro Santillithis answer。据我所知,它在 2012 年不可用,但绝对值得一看。


正常启动gdb后也可以使用layout next
U
Unni Kris

您可以通过 push ctrl+x 和 ctrl+a 来动态触发它。


感谢@user146043,如果您同时运行屏幕,这似乎是唯一的方法,因为 ctrl-a 是启动屏幕命令的方法!
看起来你也可以用那个组合关闭!
Ctrl+XO 将键盘箭头焦点移动到下一个窗口。
a
abhi

它有两种变体。

只看代码按

同时按 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.


非常感谢分享 github 项目链接。太棒了:)
C
Ciro Santilli Путлер Капут 六四事

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?


没有足够的词来形容那是多么的棒。谢谢 :)
很好,我刚刚重新访问了这个问题(或者更确切地说是我的答案)并找到了你的答案。惊人的。将参考我的回答,以确保人们不会错过它。
是否可以将其配置为垂直拆分,而不是在 TUI 模式下默认进行水平拆分?
@SamuelMyself 我从未见过,打开一个问题进行仔细检查,可能是一个有趣的功能。
@CiroSantilli郝海东冠状病毒六四事件法功轮 嗯,找到this。它已经在 6 年前被要求,但似乎还没有人工作/工作过 :(
N
Neowizard

您也可以使用命令“-”(破折号)从 gdb shell 启动它。不知道如何动态关闭它。


这似乎是最容易使用和记住的。
您可以通过执行 Cx Ca、Cx a 或 Cx A 中的任何一个来退出。请参阅 stackoverflow.com/questions/14147117/…
M
Martin Thoma

在 gdb 中键入 layout 作为命令,将显示拆分窗口。


g
girardengo

当 GDB 处于标准模式时,使用 win 会自动切换到 TUI 模式。
TUI 模式的其他命令:

info win 列出并给出所有显示窗口的大小。

下一个重点 |上一页 |源代码 |汇编 |注册 | split 将焦点设置到命名窗口。此命令允许更改活动窗口,以便滚动键可以影响到另一个窗口。

阅读 here 形成更多帮助。


u
user3042599

还有一个用于 GDB 的接口工具,称为 cgdb。即使有一些颜色突出显示。 "ESC" 切换到代码视图,"i" 切换回 gdb

https://i.stack.imgur.com/XBTEN.png


B
Blob

tui 模式显然受到了 emacs 的启发——当我点击 ^Xo 时偶然发现了它,它在 emacs 的拆分窗口之间切换——当我应该做的是切换到不同的程序时,我有时会心不在焉地点击它。无论如何,这导致了另一个尚未提及的功能,您可以使用 ^Xo 将光标从代码窗口(您可以滚动的地方)移动到命令行,反之亦然。


显然大多数来自 GNU 的程序都有像键绑定这样的 emacs,主要是因为一致性的原因。我知道 bash 中有一个 vi 模式,但这还不如 emacs 模式好。