Вызывает справку. При вызове без аргумента предоставляет краткое описание доступной справочной информации. При вызове с другой командой в качестве аргумента выводит справку по этой команде. Доступны перекрестные ссылки.
jump
Переходит на произвольный адрес и продолжает выполнение процесса с этой точки. Адрес — единственный аргумент; его можно определить в форме номера строки или адреса, указанного как *адрес
.
list
, l
Выданная без аргументов list
сначала выводит 10 строк, расположенных возле текущего адреса. Последующие вызовы list выводят последующие 10 строк. При использовании аргумента -
выводит предыдущие 10 строк. При указании номера строки выводит 10 строк, окружающих эту строку. При указании пары имя_файла:номер_строки
выводит 10 строк, окружающих заданную. При указании имени функции выводит 10 строк возле начала функции. При указании адреса в виде *адрес
выводит 10 строк, окружающих код, находящийся по этому адресу. При указании двух строк, разграниченных запятыми, выводит все строки между заданными.
next
, n
Переходит на следующую строку исходного кода в текущей функции, без захода внутрь функций. См. step
.
nexti
Переходит на следующую инструкцию машинного языка без захода внутрь функций. См. stepi
.
print
, p
Выводит значение выражения в понятной форме. Если есть переменная char* с
, команда print с
выведет адрес строки, a print *с
выведет саму строку. Для структур выводятся их члены. Можно использовать приведения типов, которые gdb
будет учитывать. Если код скомпилирован с опцией -ggdb
, в выражениях станут доступны перечислимые значения и определения препроцессора. См. display
. Команда print
принимает идентификаторы формата, несмотря на то, что при указании и преобразовании типов идентификаторы формата зачастую не нужны. См. x
.
run
, r
Запускает текущую программу с начала. Аргументы команды run передаются в командную строку для запуска программы. В gdb
, подобно оболочке, можно универсализировать имена файлов с помощью *
и []
, а также осуществлять переадресацию посредством <
, >
и >>
, но нельзя создавать каналы или внутренние документы. Без аргументов run
использует аргументы, которые были определены в самой последней команде run
или set args
. Для запуска без аргументов после их задействования используется команда set args
без дополнительных аргументов.
set
gdb
позволяет менять значения переменных, например:
(gdb) set а = argv[5]
Также каждый раз при выводе выражения с помощью print
создается сокращенная переменная вроде $1
, на которую впоследствии можно ссылаться. Таким образом, если ранее был выведен argv[5]
и gdb
указал на то, что результат сохранен в $6
, можно переписать предыдущее присваивание так:
(gdb) set а = $6
Команда set
имеет также множество подкоманд. Перечислять в этой книге их не имеет смысла, поскольку список слишком велик. Воспользуйтесь help set
для получения более детальной информации.
step
, s
Выполняет инструкции программы до достижения новой строки исходного кода. См. next
.
stepi
Выполняет в точности одну инструкцию машинного языка; с заходом внутрь функций. См. nexti
.
undisplay
Если выдана без аргумента, отменяет все отображения. В противном случае отменяет отображения указанные номерами. См. display
.
whatis
Выводит тип данных выражения, переданного в качестве аргумента команды.
where
, w
См. backtrace
.
x
Команда x
подобна print
с тем исключением, что она явно ограничивается выводом содержимого по указанному адресу в произвольном формате. Если идентификатор формата не используется, gdb
будет применять самый последний идентификатор из указанных.
4.4. Действия при трассировке программы
Существуют две программы, помогающие трассировать исполняемые файлы. Ни одной из этих программ исходный код не нужен; фактически, они не могут использовать исходные коды. Обе программы выводят в символьной текстовой форме журнал действий, выполняемых приложением.
Первая, strace
, выводит запись о каждом системном вызове программы. Вторая, ltrace
, выводит запись о каждой функции библиотеки, которую вызывает программа (и по выбору может также трассировать системные вызовы). Эти инструменты могут оказаться полезными при определении неполадок в случаях явного сбоя.