带代码的 gdb 拆分视图

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

Sorry about the picture, but ttys don't have screenshots.

这是什么?我做了什么,或者更具体地说,我怎样才能再次获得这种分屏模式?这个模式有名字吗? 或者我可以在哪里读到如何使用它?

119723 次浏览

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


也请看 这个答案西罗 · 桑蒂利。据我所知,2012年还没有,但绝对值得一看。

您还可以使用命令“-”(横线)从 gdb shell 启动它。不知道如何动态关闭它虽然。

您可以通过按 ctrl + xctrl + a动态触发它。

它有两种变体。

  1. 只能看到代码

一起按 CTRL X然后按 1

  1. 同时查看源代码和程序集

一起按“ CTRL”“ X”,然后按“2”

Http://www.cs.fsu.edu/~baker/ada/gnat/html/gdb_23.html

带有代码和程序集的视图的屏幕截图。 enter image description here

还可以看看这个神奇的 Github 项目。

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

  • info win
    列出并给出所有显示窗口的大小。
  • focus next | prev | src | asm | regs | split
    将焦点设置为命名窗口。此命令允许更改活动窗口,以便滚动键可以影响到另一个窗口。

阅读 给你表格更多帮助。

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

GDB 还有一个接口工具叫做 cgdb。 “ ESC”切换到代码视图,“ i”切换回 gdb

cgdb

GDB 仪表盘

Https://github.com/cyrus-and/gdb-dashboard

GDB 指示板使用 官方的 GDB Python API,并在 GDB 停止时输出所需的信息,例如在 next之后,如 本机 display命令

VS TUI:

  • 更加健壮,因为它只是打印到 stdout,而不是将 shell 置于更加神奇的诅咒状态,例如:

  • 从 Python 高度可配置: 您可以选择要输出的内容以及每个部分的大小取决于您正在调试的内容。

    最有用的视图已经实现了: 源、汇编、寄存器、堆栈、内存、线程、表达式... ... 但是使用 GDB Python API 上公开的任何信息来扩展它应该很容易。

    TUI 只允许显示源代码、汇编和寄存器的两个部分,仅此而已。当然,除非你想修改它的 C 源代码; -)

enter image description here

我相信 GDB 应该提供这样的设置,开箱即用,默认打开,这样会吸引更多的用户。

主要开发者 Andrea Cardaci反应迅速,非常棒,非常值得称赞。

参见: 如何在交互式调试期间突出显示 gdb 输出并为其着色?

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