CGDB

для версии 0.8.0, 16 января 2022

Боб Росси (bob@brasko.net)

перевод В.Айсин

Это руководство предназначено для GNU CGDB (версия 0.8.0, 16 января 2022 г.), интерфейса для GDB на основе GNU ncurses.

Copyright © 2019 CGDB Team

Этот документ является частью бесплатного программного обеспечения; вы можете распространять его и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения; либо версию 2 Лицензии, либо (по вашему выбору) любую более позднюю версию.

Данная программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОРГОВОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Дополнительную информацию см. в Стандартной общественной лицензии GNU.

Вместе с этой программой вы должны были получить копию Стандартной общественной лицензии GNU; если нет, напишите в Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USA.

Введение

CGDB — это основанный на curses интерфейс к отладчику GNU (GDB). Цель CGDB — быть легким и отзывчивым; и не обремененным ненужными функциями.

Интерфейс разработан для предоставления знакомого текстового интерфейса GDB с разделенным экраном, на котором отображается исходный код во время его выполнения. Пользовательский интерфейс создан по образцу классического текстового редактора Unix vi. Те, кто знаком с vi, должны чувствовать себя как дома, используя CGDB.

Библиотека, отвечающая за связь с GDB, называется gdbwire. Желающие разработать другие интерфейсы к GDB могут использовать gdbwire в качестве основы для своей программы. Используя ее, можно избежать многих проблем, связанных с анализом вывода и аннотаций GDB.

Некоторые функции, предлагаемые CGDB:

Глава 1
Вход и выход из CGDB

В этой главе обсуждается, как запустить CGDB и как выйти из него. Самое необходимое:

Глава 2
Основные концепции CGDB

Пользовательский интерфейс CGDB в настоящее время состоит из двух окон и строки состояния. Окно исходного кода находится вверху, а окно GDB — внизу. Строка состояния разделяет два окна.

Интерфейс имеет несколько режимов в зависимости от того, на каком окне находится фокус. Режим CGDB — это когда в фокусе находится окно исходного кода, а режим GDB — когда в фокусе находится окно GDB.

Начиная с версии CGDB 1.0, окна можно перемещать, и пользователь сможет создавать столько окон, сколько пожелает. Однако в настоящее время все мое время уходит на разработку интерфейса между CGDB и GDB. Как только это будет завершено, пользовательский интерфейс CGDB станет намного более совершенным. Если вы разработчик ncurses и у вас есть свободное время для работы над этой задачей, свяжитесь со мной.

2.1 Окно исходного кода

Окно исходного кода — это окно, которое предоставляет вам представление исходного кода, из которого состоит отлаживаемая программа. Оно будет отображать пользователю по одному исходному файлу за раз. Пока пользователь выполняет отладку, с помощью next и step, CGDB будет обновлять исходный файл и номер строки, чтобы держать вас в курсе того, где GDB выполняет отладку.

CGDB имеет несколько функций, которые упрощают отладку по сравнению с использованием старого доброго GDB. Одна особенность, которую вы сразу заметите при отладке программы на C, C++ или ADA, заключается в том, что синтаксис исходных файлов подсвечен. Это позволяет пользователю легко перемещаться по исходному файлу в поисках определенных мест в исходном коде. Если вы хотите иметь подсветку для другого языка, свяжитесь с нами. Чтобы понять, как перемещаться по окну исходного кода, посмотрите на команды в разделе 3.1 [Режим CGDB].

Помимо показа исходного кода, CGDB также отображает пользователю текущую исполняемую строку. Номер строки будет выделен зеленым цветом, чтобы указать, что конкретная строка является текущей строкой, отлаживаемой GDB. Кроме того, CGDB отобразит стрелку, идущую от номера строки к исходной строке. Вы можете настроить тип отображения, который использует CGDB, с помощью параметра конфигурации :set executinglinedisplay. По умолчанию используется отображение longarrow.

При навигации по окну исходного кода текущая строка, на которой находится курсор, будет выделена блоком. Это просто поможет вам отслеживать, где вы находитесь в файле. Вы можете настроить тип отображения, который использует CGDB, с помощью параметра конфигурации :set selectedlinedisplay. По умолчанию используется отображение block.

Кроме того, вы можете устанавливать или удалять точки останова в CGDB из окна исходного кода. Просто перейдите к строке, в которой вы хотите установить точку останова, и нажмите пробел. Это установит точку останова на строке, если она еще не существовала. Номер строки должен стать красным, указывая на то, что установлена точка останова. Повторное нажатие клавиши пробела удалит точку останова. Если вы отключите точку останова, номер строки станет желтым, обозначая отключенную точку останова.

CGDB также поддерживает поиск по регулярным выражениям в окне исходного кода. Если вы введете / или ?, то сможете выполнить поиск в окне исходного кода интересующей строки. Для выполнения этого поиска используются функции регулярных выражений библиотеки C, которые учитывают такие вещи, как * или +.

Полный список команд, доступных в окне исходного кода, находится в разделе 3.1 [Режим CGDB].

2.2 Окно GDB

Окно GDB позволяет пользователю взаимодействовать с отладчиком GNU. Если вы хотите передать команду GDB, просто введите ее в это окно, и GDB получит команду. Этот интерфейс должен быть на 100% идентичен использованию GDB на терминале.

В это окно можно ввести ограниченный набор ключей, которые CGDB интерпретирует и обрабатывает вместо отправки в GDB. Все они доступны в разделе 3.2 [Режим GDB].

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

CGDB также поддерживает поиск по регулярным выражениям в окне GDB.

2.3 Диалоговое окно файла

Доступно диалоговое окно файла, которое помогает пользователю просмотреть и выбрать файл, который он хочет просмотреть. Оно предоставляет пользователю список всех файлов, составляющих отлаживаемую программу. Если доступных файлов нет, потому что нет отлаживаемой программы или нет символов отладки, диалоговое окно файла не откроется, и в строке состояния отобразится сообщение.

Вы можете перейти в диалоговое окно файла, нажав, o когда находитесь в окне исходного кода. После входа в диалоговое окно файла его можно покинуть, нажав q. Вы можете перемещаться по диалоговому окну файла, используя стандартные клавиши направления, и даже можете использовать регулярное выражение для поиска файла. Это может сэкономить много времени по мере роста количества файлов.

Полный список команд, доступных в окне исходного кода, находится в разделе 3.3 [Режим диалога файлов].

2.4 Строка состояния

Строка состояния — это универсальный способ CGDB показать пользователю, какие команды он вводит в данный момент, или сообщить пользователю об ошибках, когда они происходят. CGDB не использует всплывающие окна или другие формы ввода-вывода для оповещения пользователя об информации или проблемах.

Пока CGDB работает, вы можете настроить его с помощью любой команды, допустимой в файле конфигурации CGDB. Просто введите : в окне исходного кода, и вы увидите двоеточие, а остальная часть введенной вами команды появится в строке состояния. Когда вы закончите вводить интересующую вас команду, нажмите enter. Это сообщит CGDB о необходимости выполнения команды. Если в какой-то момент вы захотите отменить текущую введенную команду, введите клавишу режима cgdb. Это вернет вас в режим CGDB. Описание клавиши режима cgdb см. в разделе 2.5 [Переключение окон].

Полный список команд, доступных в окне исходного кода, находится в главе 4 [Настройка CGDB].

2.5 Переключение между окнами

Когда CGDB вызывается, интерфейс находится в режиме GDB. Символ * справа от строки состояния указывает, что входные данные будут переданы в GDB. Чтобы переключить фокус на окно исходного кода, нажмите клавишу ESC. Клавиша режима cgdb отвечает за переключение пользователя в режим CGDB из другого режима. По умолчанию это клавиша ESC. Чтобы изменить это значение, просмотрите параметры конфигурации CGDB. См. главу 4 [Настройка CGDB].

Интерфейс теперь находится в режиме CGDB. Чтобы вернуться в режим GDB, нажмите i. Этот синтаксис основан на популярном текстовом редакторе Unix vi.

Глава 3
Команды CGDB

CGDB можно управлять различными способами. Каждый режим, в котором находится CGDB, действует по-разному. В настоящее время CGDB неявно меняет режимы в зависимости от того, какое окно активно. Следующая информация поможет вам определить, какие команды доступны в каких режимах.

3.1 Команды, доступные в режиме CGDB

Когда вы находитесь в окне исходного кода, вы неявно находитесь в режиме CGDB. Все приведенные ниже команды доступны в этом режиме. Этот режим в первую очередь доступен пользователю для просмотра текущего исходного файла, поиска в нем или переключения в другой режим.

cgdbmodekey
Перевести пользователя в командный режим. Однако вы уже находитесь в этом режиме. По умолчанию это клавиша ESC.
i
Перевести пользователя в режим GDB.
s
Перевести пользователя в режим прокрутки в режиме GDB.
Ctrl-T
Открыть новый терминал для отлаживаемой программы.
Ctrl-W
Переключить ориентацию окна (горизонтальная <-> вертикальная).
[<number>]k
[<number>]up arrow
Переместиться на одну или <number> строк вверх.
[<number>]j
[<number>]down arrow
Переместиться на одну или <number> строк вниз.
h
left arrow
Переместиться на символ влево.
l
right arrow
Переместиться на символ вправо.
Ctrl-b
page up
Переместиться на страницу вверх.
Ctrl-u
Переместиться на 1/2 страницы вверх.
Ctrl-f
page down
Переместиться на страницу вниз.
Ctrl-d
Переместиться на 1/2 страницы вниз.
gg
Переместиться в начало файла.
[<number>]G
Перейти в конец файла или на номер строки в файле.
m[a-zA-Z]
Установить отметку в позиции курсора. Строчная буква задает локальную отметку, действительную в пределах одного файла. Прописная буква устанавливает глобальную метку, действительную между файлами. Если файлов десять, в каждом файле может быть отметка а, но только в одном может быть отметка А.
'[a-zA-Z]
Перейти к соответствующей локальной или глобальной отметке.
''
Перейти к предыдущей позиции курсора.
'.
Перейти к текущей исполняемой строке.
/
Поиск с текущей позиции курсора.
?
Обратный поиск от текущей позиции курсора.
n
Следующий прямой поиск.
N
Следующий обратный поиск.
o
Открыть диалог файла.
spacebar
Установить точку останова на текущем номере строки.
t
Установить временную точку останова на текущем номере строки.
-
Уменьшить исходное окно на 1 строку или столбец (в зависимости от ориентации разделения).
=
Увеличить исходное окно на 1 строку или столбец (в зависимости от ориентации разделения).
_
Уменьшить исходное окно на 25%
+
Увеличить исходное окно на 25 %
Ctrl-l
Очистить и перерисовать экран.
F5
Отправить команду run в GDB.
F6
Отправить команду continue в GDB.
F7
Отправить команду finish в GDB.
F8
Отправить команду next в GDB.
F10
Отправить команду step в GDB.

3.2 Команды, доступные в режиме GDB

В режиме GDB пользователь находится в командном режиме или режиме прокрутки. В командном режиме пользователь вводит команды для взаимодействия с GDB. В режиме прокрутки пользователь может прокручивать выходные данные GDB. Вы можете войти в режим прокрутки, набрав page up и выйти из режима прокрутки, набрав q, i или enter.

Команды, доступные в разделе 3.2 [режим GDB], когда вы находитесь в командном режиме:

cgdbmodekey
Вернуться в исходное окно. По умолчанию это клавиша ESC.
page up
Перейти на страницу вверх и войдти в режим прокрутки.

В командном режиме CGDB передает любые другие ключи в библиотеку readline. Когда readline определяет, что команда получена, она предупреждает CGDB, и затем команда отправляется в GDB.

Команды, доступные в разделе 3.2 [режим GDB], когда вы находитесь в режиме прокрутки:

cgdbmodekey
Вернуться в окно исходного кода. По умолчанию это клавиша ESC.
page up
Переместиться на страницу вверх.
page down
Переместиться на страницу вниз.
Ctrl-u
Переместиться на 1/2 страницы вверх.
Ctrl-d
Переместиться на 1/2 страницы вниз.
F11
home key
gg
Перейти к началу буфера GDB.
F12
end key
G
Перейти в конец буфера GDB.
k
up arrow
Ctrl-p
Переместиться на одну строку вверх.
j
down arrow
Ctrl-n
Переместиться на одну строку вниз.
/
Поиск от текущей позиции курсора.
?
Обратный поиск от текущей позиции курсора.
n
Следующий прямой поиск.
N
Следующий обратный поиск.
'.
Перейти к предыдущей строке.
q
i
enter
Выйти из режима прокрутки.

3.3 Команды, доступные в режиме диалогового окна файла

Диалоговое окно файла в основном используется для того, чтобы позволить пользователю найти и открыть исходный файл, из которого состоит отлаживаемая программа. Диалоговое окно файла будет полноэкранным и будет содержать список всех файлов, из которых состоит отлаживаемая программа. Обычным примером диалогового окна файла было бы его открытие из исходного окна с помощью клавиши o, а затем поиск интересующего файла. Если вы ищете файл foo.c, введите /foo.c, нажмите enter один раз, чтобы завершить регулярное выражение, и еще раз, чтобы выбрать файл.

В диалоговом окне файла доступны следующие команды:

q
Закрыть диалоговое окно файла и вернуться в окно исходного кода.
k
up arrow
Подняться на строку.
j
down arrow
Опуститься на строку.
h
left arrow
Переместиться на строку влево.
l
right arrow
Переместиться на строку вправо.
Ctrl-b
page up
Переместиться на страницу вверх.
Ctrl-u
Переместиться на 1/2 страницы вверх.
Ctrl-f
page down
Переместиться на страницу вниз.
Ctrl-d
Переместиться на 1/2 страницы вниз.
gg
Перейти в верхнюю часть диалогового окна файла.
[<number>]G
Переместиться в конец диалогового окна файла или на номер строки в диалоговом окне файла.
/
Поиск от текущей позиции курсора.
?
Обратный поиск от текущей позиции курсора.
n
Следующий прямой поиск.
N
Следующий обратный поиск.
enter
Выбрать текущий файл.

Глава 4
Команды настройки CGDB

По умолчанию CGDB хранит файлы, специфичные для пользователя (такие как история команд, журналы программ и файлы конфигурации) в каталоге ~/.cgdb/. Это расположение настраивается; если для переменной среды CGDB_DIR установлено имя каталога, CGDB будет использовать указанный каталог вместо ~/.cgdb/.

В CGDB может быть несколько функций, которые вы найдете полезными. CGDB способен автоматизировать любую из этих команд с помощью файла конфигурации под названием cgdbrc. Он ищет этот файл в $CGDB_DIR или в HOME/.cgdb/, если переменная среды CGDB_DIR не установлена. Если файл cgdbrc существует, CGDB выполняет каждую его строку по порядку. Это как если бы пользователь ввел все команды в строку состояния после инициализации интерфейса программы.

Следующие переменные изменяют поведение некоторых аспектов CGDB. Многие из этих команд можно каким-либо образом сократить, а все логические команды можно отменить, добавив no спереди. Например: :set ignorecase включает поиск без учета регистра; в то время как :set noignorecase включает поиск с учетом регистра.

:set asr
:set autosourcereload
Если этот параметр включен, CGDB автоматически перезагрузит исходный файл, если он изменился с момента его открытия CGDB. Если он выключен, файл никогда не будет перезагружен, пока вы не запустите CGDB снова. По умолчанию включено. Эта функция полезна, когда вы отлаживаете программу, затем изменяете исходный файл, перекомпилируете и вводите r в окне командной строки GDB. В этом случае файл будет обновлен, чтобы показать новую версию. Обратите внимание: CGDB просматривает только временную метку исходного файла, чтобы определить, изменился ли он. Поэтому, если вы изменили исходный файл но еще не перекомпилировали его, CGDB все равно увидит изменения.
:set cgdbmodekey=key
Эта опция используется для определения того, какая клавиша переводит CGDB в режим CGDB. По умолчанию используется ESC. Клавишей key может быть любая обычная клавиша на клавиатуре. Это также может быть любой код клавиши, если используется обозначение кода клавиши. Эта опция особенно полезна, когда пользователь хочет использовать readline в режиме vi. Если пользователь введет set cgdbmodekey=, то клавиша Page Up будет переводить CGDB в режим CGDB, а клавиша ESC перейдет в режим readline.
:set color

Эта опция используется для включения или отключения поддержки цвета в CGDB. По умолчанию включено. Если этот параметр включен, CGDB может отображать цвет, когда это необходимо. Обычно это происходит при подсветке синтаксиса исходных файлов в окне исходного кода. Если отключено, CGDB не будет отображать цвета. Вместо этого он может использовать другие атрибуты терминала для подсветки синтаксиса, включая атрибуты полужирного шрифта и обратного текста. См. команду highlight и найдите опцию cterm.

Следует отметить, что даже если в CGDB включен цвет, если ncurses заявляет, что терминал не поддерживает цвета, CGDB не будет их использовать.

:set dwc
:set debugwincolor
Этот параметр определяет, будут ли в окне отладки отображаться цвета или нет. Значение по умолчанию включено. Если эта опция включена, если GDB или отлаживаемая программа выводят escape-код ANSI, представляющий цвет, тогда CGDB будет отображать соответствующий цвет вместо escape-кода. Если этот параметр отключен, CGDB будет отображать escape-код ANSI в окне отладки. См. https://en.wikipedia.org/wiki/ANSI_escape_code#Colors , чтобы узнать больше о escape-кодах ANSI.
:set dis
:set disasm
Эта опция используется для включения или отключения отображения ассемблерного кода в cgdb. Значение по умолчанию выключено. Если этот параметр выключен, CGDB будет отображать исходный код пользователю. Если исходный код недоступен, CGDB отобразит ассемблерный код. Если этот параметр включен, CGDB будет отображать смешанный исходный код и сборку, когда исходный код включен, и код сборки, когда исходный код недоступен. Обратите внимание, что когда отображается режим сборки, он отображается для каждой функции, а не для каждого файла.
:set eld=style
:set executinglinedisplay=style
Устанавливает стиль отображения исполняемой строки. Возможные значения стиля: shortarrow, longarrow, highlight и block. Изменяет отображение, которое используется для обозначения текущей исполняемой строки в окне исходного кода. Значение по умолчанию: longarrow. Опция shortarrow рисует стрелку рядом с номером исходной строки. Опция longarrow также рисует стрелку рядом с номером строки исходного кода, но растягивает стрелку до исходного кода. Опция highlight рисует всю строку в инверсном виде, а опция block рисует инверсный блок (курсор) рядом с выполняемым исходным кодом.
:set hls
:set hlsearch
Если этот параметр включен, при наличии предыдущего шаблона поиска будут выделены все его совпадения. По умолчанию отключено.
:set ic
:set ignorecase
Устанавливает поиск без учета регистра. По умолчанию выключено.
:set sbbs
:set scrollbackbuffersize
Устанавливает размер буфера обратной прокрутки для окна GDB равным числу строк. Обратная прокрутка по умолчанию составляет 10 000 строк.
:set sld=style
:set selectedlinedisplay=style
Устанавливает стиль отображения выбранной строки. Возможные значения стиля: shortarrow, longarrow, highlight и block. Изменяет отображение, которое используется для обозначения выбранной в данный момент строки в окне исходного кода. Значение по умолчанию: block. Опция shortarrow рисует стрелку рядом с номером исходной строки. Опция longarrow также рисует стрелку рядом с номером строки исходного кода, но растягивает стрелку до исходного кода. Опция highlight рисует всю линию в инверсном виде, а опция опция block рисует инверсный блок (курсор) рядом с выбираемым исходным кодом.
:set showmarks
Этот параметр определяет, будут ли в исходном окне отображаться метки или нет. Значение по умолчанию включено. Если этот параметр включен, CGDB будет отображать метки, установленные пользователем, на вертикальной полосе в окне исходного кода, отделяющей номер строки от исходного кода.
:set sdc
:set showdebugcommands
Если эта опция включена, CGDB будет показывать все команды, которые он отправляет в GDB. Если она выключена, CGDB не будет показывать команды, которые он передает GDB. По умолчанию выключено.
:set syn=style
:set syntax=style
Устанавливает текущий режим выделения текущего файла в соответствии со стилем синтаксиса. Возможные значения синтаксиса: c, asm, d, go, ada, rust, off, no, on или yes. Обычно пользователю никогда не придется этого делать, поскольку CGDB автоматически определяет, какой синтаксис должен иметь файл, на основе его расширения. Однако в настоящее время эта функция может быть полезна для целей отладки. on и yes включает подсветку синтаксиса в зависимости от расширения исходных файлов. off и no отключает подсветку синтаксиса. Остальные значения устанавливают средства выделения конкретного языка независимо от расширения исходных файлов.
:set to
:set timeout
Этот параметр используется вместе с параметром ttimeout для определения поведения CGDB, когда он получает часть сопоставленной последовательности клавиш или последовательности кода клавиатуры. Если эта опция включена, CGDB будет отключать тайм-аут как для пользовательских сопоставлений, так и для кодов клавиш с клавиатуры. Если этот параметр отключен, время ожидания определенных пользователем сопоставлений не будет отключено. В этом случае CGDB определит, нужно ли время ожидания ввода кодов клавиш с клавиатуры, проверив параметр ttimeout . Чтобы определить, какое время ожидания CGDB будет использовать для сопоставлений и кодов клавиш, а также какую продолжительность времени ожидания будет использовать CGDB, обратитесь к диаграмме в главе 6 [Key User Interface]. Значение по умолчанию для этой опции включено.
:set tm=delay
:set timeoutlen=delay
Эта опция используется вместе с опцией ttimeoutlen. Она представляет собой количество миллисекунд, в течение которых CGDB должен ожидать ввода кода клавиши с клавиатуры или завершения сопоставленной последовательности клавиш. Если задержка равна 0, CGDB немедленно принимает каждый полученный символ. Это предотвратит выполнение любых сопоставлений или кодов клавиш. Задержка может быть любым значением от 0 до 10000 включительно. Значение по умолчанию для переменной задержки — 1000 (одна секунда).
:set ttimeout
Этот параметр используется вместе с параметром timeout для определения поведения CGDB, когда он получает часть последовательности кода клавиатуры. Если эта опция включена, CGDB будет отключать коды клавиш с клавиатуры. Если эта опция отключена, CGDB определит, следует ли истечь таймауту для кодов клавиш с клавиатуры, проверив опцию timeout. Чтобы определить время ожидания CGDB для кодов клавиш, какую продолжительность он будет использовать, обратитесь к диаграмме в главе 6 [Key User Interface]. Значение по умолчанию для этой опции включено.
:set ttm=delay
:set ttimeoutlen=delay
Эта опция используется вместе с опцией ttimeoutlen. Она представляет собой количество миллисекунд, в течение которых CGDB должен ожидать ввода кода клавиши с клавиатуры. Если задержка равна 0, CGDB немедленно принимает каждый полученный символ. Это предотвратит завершение ввода любых кодов клавиш. Задержка может быть любым значением от 0 до 10000 включительно. Значение по умолчанию для переменной delay — 100 (одна десятая секунды).
:set ts=number
:set tabstop=number
Устанавливает количество пробелов, которые должны отображаться на экране для символов TAB. Значение по умолчанию для number — 8.
:set wmh=number
:set winminheight=number
Минимальная высота окна. Окна никогда не станут меньше этого значения. Значение по умолчанию для number — 0. Это полезно, когда для winsplitorientation установлено значение horizontal.
:set wmw=number
:set winminwidth=number
Минимальная ширина окна. Окна никогда не станут меньше этого значения. Значение по умолчанию для number — 0. Это полезно, когда для winsplitorientation установлено значение vertical.
:set winsplit=style
Установить точку разделения между окном исходного кода и GDB. Это особенно полезно в качестве настройки инициализации в вашем cgdbrc файле. См. главу 4 [Настройка CGDB]. Возможные значения style: src_full, src_big, even, gdb_big и gdb_full.
:set wso=style
:set winsplitorientation=style
Устанавливает ориентацию разделения окна на horizontal (при этом окно исходного кода размещается вверху, а окно GDB внизу) или vertical (при этом окно исходного кода размещается слева, а окно GDB - справа). См. главу 4 [Настройка CGDB].
:set ws
:set wrapscan
Поиск завершается в конце файла. По умолчанию включено.
:c
:continue
Отправить команду continue в GDB.
:down
Отправить команду down в GDB.
:e
:edit
Перезагрузить файл в исходном окне. это может быть полезно, если файл изменился с момента его открытия cgdb.
:f
:finish
Отправить команду завершения в GDB.
:help
Это отобразит текущее руководство в текстовом формате в окне исходного кода.
:logo
В окне исходного кода отобразится один из логотипов CGDB.
:hi group cterm=attributes ctermfg=color ctermbg=color term=attributes
:highlight group cterm=attributes ctermfg=color ctermbg=color term=attributes

Установить цвет и атрибуты для группы выделения. Синтаксис имитирует команду vim «highlight». Возможные значения для группы, атрибутов и цвета доступны в главе 5 [Highlighting Groups].

Вы можете указать столько пар имя=значение, сколько захотите, в любом порядке. ctermfg и ctermbg устанавливают цвета переднего плана и фона. Они могут быть указаны по номеру цвета или с использованием тех же названий цветов, что и vim. Когда CGDB связан с ncurses, число, которое вы используете для представления цвета, может находиться в диапазоне от -1 до COLORS. Когда CGDB связан с curses, оно должно находиться в диапазоне от 0 до COLORS.

cterm устанавливает атрибуты для цветных терминалов. term устанавливает атрибуты вида для монохромных терминалов. Некоторые примеры:

:highlight Logo cterm=bold,underline ctermfg=Red ctermbg=Black
:highlight Normal cterm=reverse ctermfg=White ctermbg=Black
:hi Normal term=bold
:insert
Переместить фокус на окно GDB.
:n
:next
Отправить команду next в GDB.
:nexti
Отправить команду nexti в GDB.
:q
:quit
Выйти из CGDB.
:r
:run
Отправить команду run в GDB.
:start
Отправить команду start в GDB.
:k
:kill
Отправить команду kill в GDB.
:s
:step
Отправить команду step в GDB.
:stepi
Отправить команду stepi в GDB.
:syntax
Включить или отключить синтаксис.
:u
:until
Отправить команду until в GDB.
:up
Отправить команду up в GDB.
:map lhs rhs
Создать новое или перезаписать существующее сопоставление в режиме CGDB. Если после запуска команды введена lhs, CGDB вместо этого получит rhs. Более подробную информацию о том, как использовать команду map, см. в разделе 6.2 [Using Maps].
:unm lhs
:unmap lhs
Удалить существующее сопоставление из режима CGDB. lhs — это то, что было введено слева, когда пользователь создавал сопоставление. Например, если пользователь ввел :map a<Space>b foo, он может удалить существующее сопоставление с помощью :unmap a<Space>b.
:im lhs rhs
:imap lhs rhs
Создать новое или перезаписать существующее сопоставление в режиме GDB. Если после запуска команды введена lhs, CGDB вместо этого получит rhs. Более подробную информацию о том, как использовать команду map, см. в разделе 6.2 [Using Maps].
:iu lhs
:iunmap lhs
Удалить существующее сопоставление из режима GDB. lhs — это то, что было введено слева, когда пользователь создавал сопоставление. Например, если пользователь ввел :imap a<Space>b foo, он может удалить существующее сопоставление с помощью :iunmap a<Space>b.

Глава 5
Группы подсветки CGDB

CGDB может использовать цвета, если терминал, на котором он запущен, поддерживает их. До версии 0.6.1 CGDB не позволяла пользователю каким-либо образом настраивать цвета, теперь использование цвета CGDB полностью настраивается.

CGDB смоделировала использование цветовой подсветки по образцу vim. Любые данные, которые будут окрашены в терминале, представлены группой подсветки. Группа подсветки (highlighting group) представляет данные, которые должны быть отформатированы с использованием цветов переднего плана, цветов фона и атрибутов. В настоящее время в CGDB существует несколько типов групп подсветки. Существуют группы подсветки синтаксиса, которые представляют собой подсветку синтаксиса исходных файлов. Существуют также группы пользовательского интерфейса, которые представляют собой такие элементы, как логотип CGDB или строка состояния.

Каждая группа подсветки имеет связанный с ней набор атрибутов и цветов по умолчанию. Вы можете изменить свойства групп подсветки с помощью команды подсветки. См. главу 4 [Конфигурация CGDB].

Обратите внимание, что CGDB в настоящее время поддерживает использование того же цвета фона, который использовался терминалом до запуска CGDB. Однако это работает только тогда, когда CGDB связан с ncurses. Если вы свяжете CGDB с curses, CGDB сделает фон черным.

5.1 Различные группы подсветки

Ниже приведен список всех групп подсветки, которые CDGB будет использовать при выделении синтаксиса исходных файлов.

Statement
Представляет ключевые слова, которые определяет язык.
Type
Представляет типы, которые определяет язык.
Constant
Представляет собой строку или числовое значение.
Comment
Представляет комментарии в исходном файле.
PreProc
Представляет команды препроцессора C/C++.
Normal
Представляет собой весь обычный текст.

Ниже приведен список всех групп подсветки, которые CGDB будет использовать при отображении своего пользовательского интерфейса.

StatusLine
Представляет собой строку состояния в CGDB. Строка состояния диалогового окна файла также использует эту группу.
Search
Представляет группу, используемую при отображении предыдущего поиска либо в исходном окне, либо в окне GDB в режиме прокрутки, либо в диалоговом окне файла. Используется только тогда, когда включена опция hlsearch.
IncSearch
Представляет группу, используемую, когда пользователь выполняет поиск либо в исходном окне, либо в окне GDB в режиме прокрутки, либо в диалоговом окне файла.
SelectedLineArrow
Представляет группу, используемую, когда у пользователя параметр selectedlinedisplay установлен в shortarrow или longarrow.
ExecutingLineArrow
Представляет группу, используемую, когда у пользователя параметр executinglinedisplay установлен в shortarrow или longarrow.
SelectedLineHighlight
Представляет группу, используемую, когда у пользователя параметр selectedlinedisplay установлен в highlight.
ExecutingLineHighlight
Представляет группу, используемую, когда у пользователя параметр executinglinedisplay установлен в highlight.
SelectedLineBlock
Представляет группу, используемую, когда у пользователя параметр selectedlinedisplay установлен в block.
ExecutingLineBlock
Представляет группу, используемую, когда у пользователя параметр executinglinedisplay установлен в block.
Breakpoint
Представляет группу, которая используется, когда CGDB отображает строку с установленной точкой останова.
DisabledBreakpoint
Представляет группу, которая используется, когда CGDB отображает строку с отключенной установленной точкой останова.
SelectedLineNr
Представляет группу, которая используется, когда CGDB отображает выбранную в данный момент строку. Это строка, на которой находится курсор.
ExecutingLineNr
Представляет группу, которая используется, когда CGDB отображает исполняемую в данный момент строку.
ScrollModeStatus
Представляет группу, которая используется, когда CGDB отображает текущий выбранный номер строки в режиме GDB , а пользователь прокручивает буфер GDB.
Logo
Группа, которую CGDB использует для отображения своего логотипа при запуске, когда ни один исходный файл не может быть обнаружен автоматически.
Mark
Группа, которую CGDB использует для отображения метки в окне исходного кода. Метки отображаются, когда опция showmarks включена. Подробнее см. параметр showmarks.

5.2 Различные атрибуты

CGDB поддерживает многие атрибуты, предоставляемые curses. Он применяет атрибуты к окну вывода, но поддержка таких функций зависит от используемого вами терминала.

Список атрибутов, которые в настоящее время поддерживает CGDB, приведен ниже.

normal
NONE
Сделает текст нормальным. Использует атрибут curses A_NORMAL.
bold
Сделает текст жирным. Использует атрибут curses A_BOLD.
underline
Подчеркнет текст. Использует атрибут curses A_UNDERLINE.
reverse
inverse
Поменяет цвета переднего плана и фона. Использует атрибут curses A_REVERSE.
standout
Лучший режим подсветки терминала. Использует атрибут curses A_STANDOUT.
blink
Приведет к миганию текста. Использует атрибут curses A_BLINK.
dim
Приведет к тому, что текст станет на 1/2 ярче. Использует атрибут curses A_DIM.

5.3 Различные цвета

CGDB поддерживает несколько цветов, в зависимости от того, сколько цветов поддерживает ваш терминал. Ниже приведена таблица цветов, предоставляемая CGDB. Значения для каждого цвета представляют собой определения из заголовочного файла curses, переданные в init_pair(), чтобы попросить curses создать новый цвет.

Название цвета Цвет Атрибут bold
Black COLOR_BLACK No
DarkBlue COLOR_BLUE No
DarkGreen COLOR_GREEN No
DarkCyan COLOR_CYAN No
DarkRed COLOR_RED No
DarkMagenta COLOR_MAGENTA No
Brown, DarkYellow COLOR_YELLOW No
LightGray, LightGrey, Gray, Grey COLOR_WHITE No
DarkGray, DarkGrey COLOR_BLACK Yes
Blue, LightBlue COLOR_BLUE Yes
Green, LightGreen COLOR_GREEN Yes
Cyan, LightCyan COLOR_CYAN Yes
Red, LightRed COLOR_RED Yes
Magenta, LightMagenta COLOR_MAGENTA Yes
Yellow, LightYellow COLOR_YELLOW Yes
White COLOR_WHITE Yes

Глава 6
Пользовательский интерфейс ввода CGDB (key user interface)

Key user interface — это то, как CGDB получает входные данные от пользователя. Обычно его называют KUI. CGDB просто запрашивает у KUI следующий ключ, набранный пользователем, и KUI предоставляет его.

У KUI есть две основные обязанности, помимо чтения обычного пользовательского ввода и передачи его в CGDB. Ему необходимо определить, когда пользователь набрал определенное пользователем сопоставление (user defined map) или когда пользователь нажал специальную клавишу на клавиатуре.

Определенное пользователем сопоставление или просто map используется для изменения значения набираемых клавиш. Некоторые пользователи могут называть этот тип функций макросами. Примером может быть map a b. Если пользователь затем введет символ a, KUI обнаружит, что он сопоставлен с b, и вернет b в CGDB.

Когда пользователь набирает специальную клавишу на клавиатуре, код клавиши отправляется в CGDB. Обычно такие клавиши, как HOME, DEL, F1 и т. д., при нажатии отправляют в приложение несколько символов, а не один символ, как это делает обычная клавиша. Объединение этих символов называется последовательностью клавиш. KUI отвечает за сборку последовательностей ключей обратно вместе и сообщение в CGDB о том, что пользователь ввел определенный ключ. Ключ ESC особенный, поскольку обычно большинство кодов ключей начинаются с этого ключа. Обычно это дает всем кодам клавиш общий первый ключ в последовательности ключей. KUI использует базу данных terminfo, чтобы определить, какие последовательности клавиш и какими кодами клавиш отправляются. Существует несколько часто используемых последовательностей клавиш, жестко закодированных в CGDB.

Основная проблема, которую должен решить KUI, — это определение момента получения сопоставления или последовательности ключей. Чтобы определить это, KUI иногда необходимо прочитать более одного символа. Например, если у пользователя есть 2 сопоставления map abc def и map abd def, KUI должен будет буферизовать как минимум символы a и b, прежде чем он сможет определить, собирается ли пользователь вводить сопоставление. Если после следующего нажатия клавиши пользователь наберет c или d, сопоставление будет получено, и KUI вернет d e f в CGDB. В противном случае сопоставление не получено и KUI должен вернуть a b в CGDB.

Параметры timeout, ttimeout, timeoutlen и ttimeoutlen можно использовать, чтобы сообщить KUI, должен ли он истечь по тайм-ауту при частичном сопоставлении или последовательностях клавиш, и если да, то сколько времени ему следует ждать перед тайм-аутом.

6.1 Параметры тайм-аута KUI

KUI может быть настроен на тайм-аут либо для сопоставлений, либо для последовательностей клавиш.

Когда KUI соответствует частичному сопоставлению или последовательности клавиш, он может истечь по тайм-ауту. Это означает, что он просто примет полученные ключи, если между нажатиями клавиш пройдет определенное время. Это очевидно, когда пользователь печатает сопоставление, поскольку ему приходится нажимать каждую клавишу по отдельности. Для частичных последовательностей ключей это менее очевидно. Это связано с тем, что пользователь нажимает только одну клавишу, а в CGDB отправляется несколько символов. В таблице ниже описано, как пользователь может настроить KUI для тайм-аута кодов клавиш или сопоставлений. Параметры timeout и ttimeout управляют этой функцией.

timeout ttimeout действие
off off не использовать тайм-аут
on on или off тайм-аут на сопоставлениях и кодах клавиш
off on тайм-аут на кодах клавиш

Также можно указать KUI, как долго ждать до истечения времени частичного совпадения. Если timeout включен, KUI будет ждать определенное количество времени для следующего символа при сопоставлении, прежде чем решит, что совпадение больше невозможно. Если timeout или ttimeout включены, KUI будет ждать определенное количество времени для следующего символа при сопоставлении последовательности клавиш, прежде чем он решит, что совпадение больше невозможно. Параметры timeoutlen и ttimeoutlen могут быть настроены пользователем, чтобы сообщить KUI, как долго ждать до истечения времени ожидания. В таблице ниже описано, когда KUI какую опцию использует.

timeoutlen задержка на сопоставлении задержка на кодах ключей
< 0 timeoutlen timeoutlen
>= 0 timeoutlen ttimeoutlen

Значение 0 означает, что время ожидания KUI истечет сразу же. В этом случае невозможно будет сопоставление или код ключа.

Распространенной проблемой может быть то, что когда пользователь вводит специальную клавишу, например, стрелки влево или вправо, CGDB переходит в исходный режим и не выполняет действие, запрошенное пользователем. Обычно это означает, что задержка кода ключа слишком мала. Если вы попытаетесь установить параметр set ttimeoutlen=1000, CGDB должен начать действовать так, как ожидает пользователь. Если нет, сообщите об этом в список рассылки CGDB.

6.2 Использование сопоставлений

CGDB полностью поддерживает использование сопоставлений. Это позволяет пользователю изменять значение набираемых клавиш. Например, у вас может быть следующее сопоставление :map <F2> ip<Space>argc<CR>.

Когда пользователь находится в режиме CGDB и нажимает F2, вместо него будет использоваться значение сопоставления. Ключ i сначала будет получен CGDB и переведет пользователя в режим вставки. Затем CGDB получит p argc, за которым последует клавиша Enter.

CGDB в настоящее время поддерживает два списка сопоставлений. Любое сопоставление, добавленное с помощью команды map, будет использоваться CGDB, когда он находится в режиме CGDB. Вы можете удалить сопоставление, созданное вами с помощью команды map, с помощью команды unmap. Если вы хотите иметь сопоставления в режиме GDB, вы можете использовать команду imap. Аналогично, iunmap удалит сопоставление в наборе imap. Некоторыми примерами этого могут быть

map a<Space>b foo
unmap a<Space>b

imap a<CR>b foo
iunmap a<CR>b

6.3 Коды клавиш

Приведенный выше пример мог бы быть немного более поясняющим для людей, незнакомых с сопоставлениями vim. Сопоставление принимает ключ и значение. Они разделены пробелом. Ни в ключе, ни в значении не может быть пробела, или он считается разделителем между ключом и значением. Если пользователь желает иметь пробел либо в ключевой, либо в значимой части карты, он может использовать нотацию кода ключа <Space>. Ниже приведена таблица кодов клавиш в форме обозначения кодов клавиш. Обозначение кода ключа может использоваться в любой команде сопоставления.

обозначение значение
<Esc> escape key
<Up> cursor up key
<Down> cursor down key
<Left> cursor left key
<Right> cursor right key
<Home> home key
<End> end key
<PageUp> page up key
<PageDown> page down key
<Del> delete key
<Insert> insert key
<Nul> zero
<Bs> backspace key
<Tab> tab key
<NL> linefeed
<FF> formfeed
<CR> carriage return
<Space> space
<Lt> less-than
<Bslash> backslash
<Bar> vertical bar
<F1> - <F12> function keys 1 to 12
<C-...> control keys
<S-...> shift keys

Глава 7
Разрешение потока управления терминалом в CGDB

Обычно пользователь может установить поведение потока управления с помощью команды stty, например stty -ixon -ixoff. Это отключит поток управления на терминале, где запущен CGDB. Если вы хотите снова включить поток управления, вы можете ввести stty ixon ixoff. Если управление потоком включено, когда пользователь вводит Ctrl-s, терминал останавливается. Когда пользователь вводит Ctrl-q, терминал перезагружается. При использовании readline нажатие Ctrl-s обычно выполняет поиск вперед. Итак, если вы хотите получить эту или другую функциональность из readline, просто отключите поток управления и запустите CGDB.

Глава 8
Сборка CGDB из исходного кода

Для сборки CGDB из исходного кода требуется несколько пакетов. Во-первых, CGDB размещен на GitHub. Вы можете определить, как получить CGDB из исходного кода, посмотрев здесь: https://cgdb.github.io/

Если у вас есть исходный код CGDB, вы можете приступить к его сборке. Конечно, для сборки CGDB вам понадобится множество пакетов. Ниже приведен список всех из них, которые необходимы для сборки CGDB.

GNU Make
Я успешно использовал версию 3.79.1, однако, вероятно, подойдут и более старые версии.
GNU GCC
Компилятор GNU C. Я скомпилировал CGDB с версиями от 2.9.5 до 4.0.2.
GNU Readline
Библиотека чтения GNU версии 5.1. CGDB не будет работать с версиями до 5.1. Readline был модифицирован специально для работы с CGDB.
GNU Ncurses
Я успешно использовал libncurses.so.5. Однако более старые версии, вероятно, тоже будут работать.

Ниже приведен список дополнительных пакетов, которые вам понадобятся при изменении определенных файлов в CGDB.

GNU Flex
Если вы измените какие-либо файлы с расширением .l, вам потребуется установить flex. Я использовал flex 2.5.4 для сборки CGDB.
GNU Texinfo
Если вы измените doc/cgdb.texinfo, то вам потребуется установить этот пакет. Я использовал версию 4.7 для создания документации для CGDB.

CGDB использует autoconf/automake для создания сценариев настройки и make-файлов. Итак, если вы измените какой-либо файл autoconf/automake, вам потребуется установить это программное обеспечение.

GNU Automake
Это программа aclocal, версия должна быть 1.9.5.
GNU Autoconf
Это программа autoconf, версия 2.59.
GNU m4
Это программа m4, версия должна быть 1.4.3.

Приложение A
Копирайт данного руководства

https://www.gnu.org/licenses/old-licenses/gpl-2.0.html