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 и как выйти из него. Самое необходимое:
-
Введите
cgdb
, чтобы запустить CGDB. -
Введите
quit
илиCtrl-d
в окне GDB для выхода. -
Введите
:quit
в окне исходного кода, чтобы выйти. Это работает даже если GDB в данный момент зависает или выполняет длинную команду.
Глава 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