131

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

对不起图片,但ttys没有截图。

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

4

9 回答 9

110

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


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

于 2012-04-12T00:01:19.580 回答
104

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

于 2013-02-15T14:21:13.227 回答
46

它有两种变体。

  1. 只看代码按

一起按CTRL X,然后 1

  1. 查看源代码和程序集

同时按“CTRL”“X”,然后按“2”

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

带有代码和程序集的视图的屏幕截图。 在此处输入图像描述

还可以查看这个惊人的 Github 项目。

于 2013-11-21T06:44:00.043 回答
24

GDB 仪表板

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

GDB 仪表板使用官方的 GDB Python API并在 GDB 停止时打印您想要的信息,例如在 a 之后next,如本机display命令

与 TUI:

  • 更健壮,因为它只是打印到标准输出而不是将外壳置于更神奇的诅咒状态,例如:

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

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

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

在此处输入图像描述

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

哦,主要开发人员Andrea Cardaci 反应迅速,非常棒。大赞。

另请参阅:如何在交互式调试期间突出显示和着色 gdb 输出?

于 2018-07-12T09:17:59.407 回答
16

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

于 2012-11-27T09:05:05.677 回答
13

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

于 2014-06-30T14:37:39.397 回答
8

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

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

在此处阅读更多帮助。

于 2014-06-13T18:22:12.167 回答
2

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

CGDB

于 2018-03-25T03:17:29.753 回答
1

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

于 2018-10-25T20:04:38.550 回答