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

如何在TUI模式下在GDB的命令窗口中向后滚动?,gdb,scroll,key-bindings,tui,Gdb,Scroll,Key Bindings,Tui,假设 (gdb) print *this 产生了20行输出。是的,将有类型继续,或q退出,但我想滚动回到顶部后,我得到了底部的输出 我想这并不能回答我的问题。它说 将活动窗口向上滚动一页 但是当焦点在命令窗口上时,PgUp将回放命令历史记录,而不是在命令窗口中向后滚动。是不是只有我才有这种行为 如果这有什么不同,我使用SSH连接到Red Hat Linux。我在这里找到了答案: 请注意,当SRC窗口具有焦点时,箭头键将移动源代码,但当CMD窗口具有焦点时,箭头键将选择命令历史记录中的上一个和

假设

(gdb) print *this
产生了20行输出。是的,将有类型继续,或q退出,但我想滚动回到顶部后,我得到了底部的输出

我想这并不能回答我的问题。它说

将活动窗口向上滚动一页

但是当焦点在命令窗口上时,PgUp将回放命令历史记录,而不是在命令窗口中向后滚动。是不是只有我才有这种行为

如果这有什么不同,我使用SSH连接到Red Hat Linux。

我在这里找到了答案:

请注意,当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)

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

set trace-commands on
set logging on
然后在另一个shell中跟踪日志:

cd where/gdb/is/running
tail -f gdb.txt
这具有将滚动与命令交互分离的优点,因此您可以在查看GDB输出的某些过去部分时键入命令

没有一个滚动键在我的CMD窗口中工作,所以GDB有效地消耗和破坏它自己的输出。退出TUI模式允许我向上滚动,但在TUI模式下发生的输出不存在。非TUI窗口仅显示退出TUI模式后生成的新输出。到目前为止,日志和尾部是我能找到的唯一解决方案

编辑:如果您在切换到TUI模式之前通过set logging on激活GDB日志记录,您可能会发现日志记录在进入TUI时停止,这是GDB中的一个错误。您可以将其重新打开:

set logging off
set logging on

当您使用Ctrl+p返回到以前的命令时,可以对上一个命令尝试Ctrl+p,对下一个命令尝试Ctrl+N:

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

下一个选项也可以使用如上所述的ctrl+x O切换焦点。@hlin117,仍然不知道如何从此答案滚动cmd窗口我相信这应该是可以接受的答案。顺便说一句,fs n也可以工作:数据这并没有回答如何在输出中向后滚动的问题。这如何回答这个问题?-在TUI模式下,如何在GDB的命令窗口中向后滚动?在进入TUI模式时,是否有方法设置登录?这样我就不必手动操作了。@VivekAgrawal:我建议在.gdbinit中定义一个函数,以进入TUI模式,并按照您的需要设置日志和其他任何内容。有关GDB init函数的示例,请参见本文。如果您的GDB日志记录中有多个不同的环境,您可以在每台机器上自定义.gdbinit函数。与下面的EmptyData和Rohan Ghige的答案相比,这真的很尴尬;推荐这两个答案中的任何一个。@ChrisSmowton不,到目前为止,这个答案是唯一一个试图解决这个问题的答案。你可能混淆了屏幕滚动和命令行编辑,特别是在历史记录列表中移动,这是其他人之前已经指出的两件不同的事情。啊,是的,我确实想滚动命令历史记录。这不会滚动输出。