如何在TUI模式下向后滚动GDB的命令窗口?

nod*_*kai 41 scroll gdb tui key-bindings

假设

(gdb) print *this
Run Code Online (Sandbox Code Playgroud)

产生了20行输出.是的,会有Type <return> to continue, or q <return> to quit,但我想在输出到底部之后回滚到顶部.

我不认为http://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html回答了我的问题.它指出

<PgUp>
将活动窗口向上滚动一页.

但是当焦点在命令窗口上时,PgUp会回退命令历史记录,而不是在命令窗口中向后滚动.只有我这个行为受到了影响吗?

我正在使用Putty来SSH到RHEL(如果这有任何不同.)

Lup*_*pus 42

我在这里找到了答案:http://beej.us/guide/bggdb/

请注意,当SRC窗口具有焦点时,箭头键将移动源代码,但是当CMD窗口具有焦点时,箭头键将选择命令历史记录中的上一个和下一个命令.(对于记录,移动SRC窗口单行和单页的命令是+, - ,<和>.)

还有一个示例会话说明了这一点:

(gdb) info win
        SRC     (36 lines)  <has focus>
        CMD     (18 lines)
(gdb) fs next
Focus set to CMD window.
(gdb) info win
        SRC     (36 lines)
        CMD     (18 lines)  <has focus>
(gdb) fs SRC
Focus set to SRC window.
(gdb)
Run Code Online (Sandbox Code Playgroud)

  • @ hlin117,仍然不知道如何从这个答案滚动cmd窗口 (17认同)
  • 而不是`fs next`也可以使用`ctrl + xo`切换焦点,如[文档]中所述(http://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html). (10认同)
  • 这不回答如何向后滚动输出的问题. (6认同)
  • 这如何回答问题?- *“如何在 TUI 模式下在 GDB 的命令窗口中向后滚动?”* (6认同)
  • 这并不能以任何方式回答这个问题。 (3认同)
  • 我相信这应该是公认的答案。顺便说一句,`fs n` 也有效。:D (2认同)

Byr*_*ins 33

在TUI模式下查看GDB输出历史记录的一种方法是启用日志记录:

set trace-commands on
set logging on
Run Code Online (Sandbox Code Playgroud)

然后在另一个shell中尾随日志:

cd where/gdb/is/running
tail -f gdb.txt
Run Code Online (Sandbox Code Playgroud)

这具有将滚动与命令交互分离的优点,因此您可以在查看GDB输出的过去部分时键入命令.

滚动键都不在我的CMD窗口中工作,因此GDB会有效地消耗和销毁自己的输出.切换出TUI模式允许我向上滚动,但在TUI模式下发生的输出不存在 - 非TUI窗口仅显示切换出TUI模式后生成的新输出.到目前为止,log和tail是我能找到的唯一解决方案.


编辑:如果set logging on在切换到TUI模式之前激活GDB日志记录(via ),您可能会发现在进入TUI时停止记录(这是GDB中的错误).您可以重新打开它:

set logging off
set logging on
Run Code Online (Sandbox Code Playgroud)

  • @ChrisSmowton 不,到目前为止,这个答案是唯一一个试图解决这个问题的答案。您可能会混淆屏幕滚动和命令行编辑(特别是在历史列表中移动),正如其他人之前已经指出的那样,这是两个不同的事情。 (4认同)
  • @VivekAgrawal:我建议在“.gdbinit”中定义一个函数来进入 TUI 模式,并按照您需要的方式设置日志记录(以及其他任何内容)。有关 GDB 初始化函数的示例,请参阅此 [gist](https://gist.github.com/chrislongo/3351197#file-gdbinit-L347)。如果您有多个 GDB 日志记录存在差异的环境,您只需在每台计算机上自定义 .gdbinit 函数即可。 (2认同)

Roh*_*ige 11

您可以尝试__CODE__以前的命令,并__CODE__下一个命令(如果你已经使用__CODE__回到以前的命令:)

  • 这不会滚动输出。 (9认同)

Emp*_*ata 8

使用C-x o(通常是Ctrl+ X, O)。使用它,您可以更改活动窗口,然后使用正常的向上向下箭头查看以前的命令。

  • OP 询问的是命令_输出_,而不是命令本身。 (4认同)