Эта глава посвящена тому, как запустить GDB и как из него выйти. Основные принципы:
quit
или C-d для выхода из него.
Вызывайте GDB путем запуска программы gdb
.
Начав работу, GDB считывает команды с терминала до тех пор,
пока вы не скажете ему выйти.
Вы также можете запустить gdb
с различными аргументами и
ключами, чтобы с самого начала более детально задать среду отладки.
Ключи командной строки, описанные здесь, предназначены для охвата различных ситуаций; в действительности, в некоторых средах часть этих ключей может быть недоступна.
Чаще всего GDB вызывается с одним аргументом, который определяет исполняемую программу:
gdb программа
Вы также можете указать при старте как исполняемую программу, так и файл дампа памяти:
gdb программа дамп
Если вы хотите отладить выполняющийся в данный момент процесс, то вместо этого, вы можете указать вторым аргументом идентификатор этого процесса:
gdb программа 1234
присоединит GDB к процессу 1234
(если, конечно, у вас
нет файла с именем `1234', GDB сначала проверяет
наличие файла дампа памяти).
Преимущества, которые можно получить при использовании второго аргумента командной строки, требуют наличия достаточно полной операционной системы; если вы используете GDB как удаленный отладчик, присоединенный к компьютеру без операционной системы, там вообще может не быть понятия "процесса", и часто нет никакого способа получить дамп. GDB предупредит вас, если ему не удается присоединиться к процессу или считать файл дампа памяти.
Вы можете запустить gdb
без вывода начального сообщения,
описывающего отсутствие гарантии, задав ключ -silent
:
gdb -silent
Кроме того, вы можете контролировать процесс запуска GDB с помощью ключей командной строки. GDB может сам напомнить вам о доступных ключах.
Введите
gdb -help
чтобы вывести на экран все доступные ключи с кратким описанием их использования (сокращенный эквивалент -- `gdb -h').
Все заданные вами ключи и параметры командной строки обрабатываются последовательно. Порядок становится важным при использовании ключа `-x'.
При запуске, GDB считывает параметры, отличные от ключей, как указатели на исполняемую программу и файл дампа (или идентификатор процесса), точно так же, как если бы эти параметры задавались ключами `-se' и `-c' соответственно. (GDB считает первый параметр, не имеющий соответствующего флага ключа, эквивалентом ключа `-se', за которым следует этот параметр; а второй такой параметр, если он есть, --- эквивалентом ключа `-c', за которым следует этот параметр.)
Если GDB был сконфигурирован без включения поддержки файлов дампа, что имеет место для большинства встроенных целей, то он выразит недовольство вторым аргументом и проигнорирует его.
Многие ключи имеют как длинную, так и краткую формы; в следующем списке приводятся обе. GDB также распознает недвусмысленные сокращения длинных форм. (Вы можете, по желанию, обозначать ключи с помощью `--', а не `-', хотя мы показываем наиболее употребляемый формат.)
-symbols файл
-s файл
-exec файл
-e файл
-se файл
-core файл
-c файл
-c номер
attach
(при условии, что нет файла в формате дампа
памяти с именем номер; в этом
случае `-c' определяет этот файл как дамп для считывания).
-command файл
-x файл
-directory каталог
-d каталог
-m
-mapped
mmap
, вы можете использовать этот ключ,
чтобы GDB записывал символы из вашей программы в файл в текущем
каталоге, допускающий повторное использование. Если программа,
которую вы отлаживаете, называется `/tmp/fred', то отображаемым
символьным файлом будет `/tmp/fred.syms'. Последующие отладочные
сеансы GDB замечают наличие этого файла и могут быстро
отобразить в память символьную информацию из него, а не читать
таблицу символов из выполняемого файла.
Файл `.syms' специфичен для рабочей машины, на которой запускается
GDB. Он содержит точный образ внутренней символьной
таблицы GDB. Он не может быть разделен между несколькими
рабочими платформами.
-r
-readnow
Ключи -mapped
и -readnow
обычно используются вместе, чтобы
построить файл `.syms', который содержит полную информацию о
символах. (См. раздел 12.1 Команды для задания файлов, для информации о
файлах `.syms'.) Вот простой вызов GDB, не делающий
ничего, кроме построения файла `.syms' для использования в будущем:
gdb -batch -nx -mapped -readnow имя-программы
Вы можете вызывать GDB в различных альтернативных режимах -- например, в пакетном или в "тихом" режиме.
-nx
-n
-quiet
-silent
-q
-batch
0
после обработки
всех командных файлов, заданных ключом `-x' (и всех команд
из инициализационных файлов, если это не запрещено ключом `-n').
Выйти с ненулевым значением, если во время выполнения
команд GDB из командных файлов произойдет ошибка.
Пакетный режим может быть полезен при вызове GDB как
фильтра; например, чтобы загрузить программу и запустить ее на
другом компьютере; чтобы это было более удобно, сообщение
Program exited normally.(которое обычно выдается при завершении программы, выполняемой под управлением GDB) при выполнении в пакетном режиме не выдается.
-nowindows
-nw
-windows
-w
-cd каталог
-fullname
-f
-epoch
-annotate уровень
-async
-noasync
-baud бод-в-сек
-b бод-в-сек
-tty устройство
-t устройство
-interpreter интерп
-write
-statistics
-version
quit [выражение]
q
quit
(сокращенно q
)
или введите знак конца файла (обычно C-d).
Если вы не укажете выражение, GDB
закончит работу нормально; в противном случае, он
использует результат выражения как код ошибки.
Прерывание (часто C-c) не приводит к выходу из GDB, а завершает любую выполняющуюся команду и возвращает вас на командный уровень. Вы можете безопасно пользоваться прерыванием в любое время, потому что GDB не позволяет ему вступить в силу до того, как это станет безопасным.
Если вы использовали GDB для управления присоединенным процессом
или устройством, вы можете освободить его командой detach
(см. раздел 4.7 Отладка запущенного ранее процесса).
Если вам потребовалось выполнить команды оболочки во время сеанса
отладки, нет смысла приостанавливать или покидать
GDB; вам достаточно воспользоваться командой shell
.
shell командная строка
SHELL
, если она существует, определяет,
какую оболочку запустить. В противном случае, GDB
использует оболочку по умолчанию (`/bin/sh' в системах Unix,
`COMMAND.COM' в MS-DOS, и так далее).
В средах разработки часто бывает необходимо воспользоваться
утилитой make
. Для этой цели вам не обязательно пользоваться
командой shell
в GDB:
make make-арг
make
с указанными аргументами. Это
эквивалентно `shell make make-арг'.