Эта глава посвящена тому, как запустить 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-арг'.