разделенное представление gdb с кодом


111

Я просто отлаживал программу в gdb и каким-то образом обнаружил новую функцию, которую никогда раньше не видел и даже не слышал, - разделенное представление, в котором я могу видеть и просматривать код в дополнение к командам:

Извините за картинку, но у ttys нет скриншотов.

Что это? Что я сделал, или, точнее, как мне снова получить этот режим разделения экрана? Есть ли название для этого режима или где-нибудь я могу прочитать о том, как его использовать?


2
Для быстрой справки: вы можете выйти из этого режима с помощью любого из Cx Ca, Cx a или Cx A. См. Этот вопрос .
Ричард

Ответы:


95

Это называется TUI (без шуток). Начните, например, с gdbtuiили gdb -tui...


11
также можно использовать layout nextпосле запуска в gdbобычном режиме
хаверим

87

Вы можете запускать его динамически, нажимая ctrl+ xи ctrl+ a.


спасибо @ user146043, это кажется единственным способом, если вы запускаете screen в то же время, что ctrl-a - это способ инициировать экранные команды!
olik79

Похоже, ты тоже сможешь завершить это комбо!
Ник Десолньер,

40

Есть два варианта.

  1. только для просмотра кода Нажмите

Нажмите CTRL Xвместе, а затем 1

  1. Чтобы увидеть как исходный код, так и сборку

Одновременно нажмите CTRL, X и затем 2.

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

Снимок экрана представления с кодом и сборкой. введите описание изображения здесь

Также ознакомьтесь с этим удивительным проектом Github.


Большое спасибо за то, что поделились ссылкой на проект github. Это слишком круто :)
Вивек Агравал

16

Вы также можете запустить его из оболочки gdb, используя команду «-» (тире). Не знаю, как его динамически выключить.


Кажется, это самый простой в использовании и запоминании.
Siyuan Ren

2
Вы можете выйти, выполнив одно из Cx Ca, Cx а, или Cx А. См stackoverflow.com/questions/14147117/...
dmonopoly

15

Панель управления GDB

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

Панель управления GDB использует официальный GDB Python API и выводит необходимую вам информацию, когда GDB останавливается, например, после a next, как собственная displayкоманда .

По сравнению с TUI:

  • более надежный, поскольку он просто выводит на стандартный вывод вместо того, чтобы переводить оболочку в состояние более волшебных проклятий, например:

  • широкие возможности настройки из Python: вы можете выбрать, что вы хотите вывести, и размер каждого раздела в зависимости от того, что вы отлаживаете.

    Наиболее полезные представления уже реализованы: исходный код, сборка, регистры, стек, память, потоки, выражения ... но его должно быть легко расширить с помощью любой информации, представленной в GDB Python API.

    TUI позволяет отображать только два источника: сборку и регистры, и все. Если, конечно, вы не хотите изменять исходный код на C ;-)

введите описание изображения здесь

Я считаю, что GDB должен поставляться с такой настройкой из коробки и включенным по умолчанию, таким образом он привлечет гораздо больше пользователей.

О, и главный разработчик, Андреа Кардачи , был очень отзывчивым и потрясающим. Большая честь.

См. Также: Как выделить и раскрасить вывод GDB во время интерактивной отладки?


2
Не хватает слов, чтобы описать, насколько это круто. Спасибо :)
unresolved_external


5

Когда GDB находится в стандартном режиме, using winавтоматически переключается в режим TUI.
Другая команда для режима TUI:

  • info win
    Перечислите и укажите размер всех отображаемых окон.
  • focus next | prev | src | asm | regs | split
    Установите фокус на названное окно. Эта команда позволяет изменить активное окно, чтобы клавиши прокрутки можно было переключить на другое окно.

Прочтите здесь, чтобы получить дополнительную помощь.


2

Существует также инструмент интерфейса для GDB, называемый cgdb. Даже с некоторым цветным мелированием. «ESC» для переключения в режим просмотра кода, «i» для возврата в GDB

cgdb


1

Режим tui был явно вдохновлен emacs - я обнаружил его случайно, когда нажал ^ Xo, который переключает между разделенными окнами в emacs - я иногда ударяю по нему рассеянно, когда то, что я должен делать, - это переключаться на другую программу. В любом случае, это приводит к другой еще не упомянутой функции: вы можете перемещать курсор из окна кода (где вы можете прокручивать) в командную строку или наоборот, используя ^ Xo.


Очевидно, что большинство программ от GNU имеют emacs, такие как привязки клавиш, в основном из-за соображений согласованности. Я знаю, что в bash есть режим vi, но этого недостаточно, как режим emacs.
klaus
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.