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, выводит запись о каждой функции библиотеки, которую вызывает программа (и по выбору может также трассировать системные вызовы). Эти инструменты могут оказаться полезными при определении неполадок в случаях явного сбоя.
Например, предположим, что имеется системный демон, функционирующий уже некоторое время, который начал выдавать ошибки сегментации. Скорее всего, это вызвано изменением в некоторых файлах данных, но неизвестно каких именно. Первым шагом должен быть запуск системного демона под управлением strace. Нужно просмотреть несколько последних файлов, которые демон открывал перед тем, как произошла ошибка сегментации, и найти в этих файлах возможные причины. Либо предположим, что другой демон внезапно начал занимать много процессорного времени; в этом случае можно запустить его сначала под strace, а затем и под ltrace, если straceчетко не покажет, что конкретно делал демон. В результате можно определить входные параметры или условия, которые привели к потреблению такого количества процессорного времени.
Подобно gdb, straceи ltraceможно использовать для выполнения программы от начала до конца или подключаться к уже запущенным программам. По умолчанию straceи ltraceпроизводят вывод на стандартное устройство вывода. Обе программы требуют указания сначала собственных опций, за которыми должен следовать исполняемый файл для запуска, и, если исполняемый файл указан, то все опции, которые передаются ему, должны записываться следом.
Читать дальше