Как я могу прокрутить назад в командном окне GDB в режиме TUI?

Предположим, что

(gdb) print *this

привело к 20 строкам. Да, будет Type <return> to continue, or q <return> to quit, но я бы хотел вернуться к началу после того, как попал в конец вывода.

Я не думаю, что http://sourceware.org/gdb/onlinedocs/gdb/TUI-Keys.html отвечает на мой вопрос. Говорится


Прокрутите активное окно на одну страницу вверх.

но когда фокус находится на командном окне, PgUp перематывает историю команд вместо прокрутки назад в командном окне. Только я страдаю от этого поведения?

Я использую Putty для того, чтобы использовать SSH для RHEL (если это имеет какое-либо значение.)

5 ответов

Решение

Один из способов просмотреть историю вывода GDB в режиме TUI - включить ведение журнала:

set trace-commands on
set logging on

а затем подключите журнал в другой оболочке:

cd where/gdb/is/running
tail -f gdb.txt

Это имеет то преимущество, что отделяет прокрутку от командного взаимодействия, так что вы можете вводить команды, просматривая какой-то предыдущий раздел вывода GDB.

Ни одна из клавиш прокрутки не работает в моем окне CMD, поэтому GDB эффективно использует и уничтожает свой собственный вывод. Переключение из режима TUI позволяет мне прокручивать вверх, но вывод, который произошел в режиме TUI, отсутствует - в окне без TUI отображаются только новые выходные данные, созданные после переключения из режима TUI. Пока единственное решение, которое я могу найти, это бревно и хвост.


Изменить: если вы активируете ведение журнала GDB (через set logging on) перед переключением в режим TUI вы можете обнаружить, что регистрация прекращается при вводе TUI (это ошибка в GDB). Вы можете включить его снова:

set logging off
set logging on

Я нашел ответ здесь: 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)

Ты можешь попробовать Ctrl + p для предыдущей команды и Ctrl + n для следующей команды (когда вы использовали Ctrl + p вернуться к предыдущим командам:)

Использование C-x o Используя это, вы можете изменить свое активное окно, а затем использовать обычную стрелку вверх, чтобы увидеть предыдущие команды.

Я думаю, что это лучший ответ.
В других ответах используется трассировка вывода, чтобы увидеть вывод в отдельном текстовом выходном файле, но с его помощью вы можете увидеть вывод команды в окне GDB путем прокрутки.
Во всех ответах предполагалось, что вы находитесь в режиме TUI (текстовый пользовательский интерфейс) с использованием библиотеки проклятий. В этом режиме, когда вы используете стрелку вверх или вниз в окне команд, отображаются только предыдущие или следующие команды, которые не нужны ОП.

Верный метод: вы выходите из режима TUI, введя команду «tui отключить» в командном окне. Затем, когда вывод команды очень длинный, вы можете прокрутить вверх, чтобы увидеть вывод команды. Если вы хотите вернуться в режим TUI, сделайте «tui Enable».
Я проверил это после установки gdb-dashboard , с помощью которого вы можете видеть всю информацию, но я думаю, что вы можете использовать его без gdb-dashboard.

Другие вопросы по тегам