Как я могу прокрутить назад в командном окне 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.