[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Применение dbx для отладки на машинном уровне

Программу dbx можно применять для отладки программ на уровне ассемблера. Можно просматривать и изменять адреса памяти, просматривать команды ассемблера и пошаговые инструкции, устанавливать точки прерывания и события трассировки по адресам памяти и просматривать регистры.

В приведенных ниже командах и примерах адрес - это выражение, значение которого равно адресу памяти. В наиболее общем виде адрес задается как целое число или как выражение, в котором вычисляется адрес идентификатора с помощью оператора & (амперсанд). В командах машинного уровня можно также задавать адрес в виде выражения, заключенного в круглые скобки. Адреса могут состоять из других адресов и операторов сложения (+), вычитания (-) и косвенной адресации (унарная операция *).

Дополнительная информация об отладке программ на машинном уровне с помощью dbx приведена в следующих разделах.

Работа с машинными регистрами

Для просмотра содержимого машинных регистров предназначена команда registers. Регистры делятся на три группы: регистры общего назначения, регистры с плавающей точкой и регистры управления системой.

Регистры общего назначения

Регистры общего назначения обозначаются $rномер, где номер - номер регистра.

Примечание: Значение регистра может быть равно шестнадцатеричному числу 0xdeadbeef. Это значение присваивается всем регистрам общего назначения при инициализации.

Регистры с плавающей точкой

Регистры с плавающей точкой обозначаются $frномер, где номер - это номер регистра. По умолчанию содержимое регистров с плавающей точкой не выводится. Для просмотра необходимо сбросить переменную $noflregs программы отладки (unset $noflregs).

Регистры управления системой

Поддерживаются следующие регистры управления системой:

Проверка адресов памяти

С помощью приведенной ниже команды можно просматривать содержимое регистров (для этого необходимо указать начальный адрес и либо конечный адрес, либо число элементов в переменной Счетчик). Переменная Режим определяет способ представления содержимого памяти при печати.

адрес, адрес / [режим][> файл]

адрес / [счетчик][режим] [>файл]

Если переменная Режим не задана, используется предыдущий режим. Начальный режим - X. Поддерживаются следующие режимы печати:

b Печать байта в восьмеричном формате.
c Печать байта в виде символа.
D Печать длинного слова в десятичном формате.
d Печать короткого слова в десятичном формате.
f Печать числа с плавающей точкой с одинарной (обычной) точностью.
g Печать числа с плавающей точкой с двойной точностью.
h Печать байта в шестнадцатеричном формате.
i Печать машинной команды.
lld Печать 8-байтового десятичного числа со знаком.
llo Печать 8-байтового восьмеричного числа без знака.
llu Печать 8-байтового десятичного числа без знака.
llx Печать 8-байтового шестнадцатеричного числа без знака.
O Печать длинного слова в восьмеричном формате.
o Печать короткого слова в восьмеричном формате.
q Печать числа с плавающей точкой с расширенной точностью.
s Печать строки символов, оканчивающейся символом NULL.
X Печать длинного слова в шестнадцатеричном формате.
x Печать короткого слова в шестнадцатеричном формате.

В приведенном ниже примере выражения в круглых скобках могут использоваться как адреса:

(dbx) print &x
0x3fffe460
(dbx) &x/X
3fffe460: 31323300
(dbx) &x,&x+12/x
3fffe460: 3132 3300 7879 7a5a 5958 5756 003d 0032
(dbx) ($pc)/2i
100002cc (sub)  7c0802a6        mflr     r0
100002d0 (sub + 0x4)    bfc1fff8         stm       r30,-8(r1)

Выполнение программы на машинном уровне

Для отладки программы на машинном уровне используются почти те же команды, что и для отладки на символьном уровне. Команда stopi останавливает процессор при достижении определенного адреса, выполнении условия или изменении переменной. Команды tracei работают так же, как и команды символьной трассировки. Команда stepi выполняет одну или указанное Число машинных команд.

Если бы вы выполнили другую команду stepi в этой точке, то вы бы остановились на адресе 0x10000618, обозначенном как точка входа для процедуры printf. Если вы не планируете останавливаться на этом адресе, вы могли бы использовать команду return, чтобы продолжить выполнение со следующей команды в sub с адресом 0x100002e0. В этой точке команда nexti будет автоматически продолжать выполнение до адреса 0x10000428.

Если в вашей программе существует несколько нитей, то при останове программы на экран будет выдано символьное имя работающей нити. Например:

останов в sub по адресу 0x100002d4 ($t4)
10000424 (sub+0x4) 480001f5 bl 0x10000618 (printf)

Отладка исполняемых файлов, переупорядоченных с помощью fdpr

Вы можете отлаживать программы, которые были переупорядочены на уровне команд с помощью команды fdpr (реструктурирование направленной программы с обратной связью, компонент Performance Toolbox для AIX). Если применяются опции оптимизации -R0 или -R2, то dbx может выдавать информацию о соответствии между преобразованными адресами команд и адресами в исходном исполняемом файле:

0xRRRRRRRR = fdpr[0xYYYYYYYY]

В данном примере 0xRRRRRRRR - переупорядоченный адрес, а 0xYYYYYYYY - исходный адрес. Кроме того, dbx использует записи обратной трассировки в исходной области команд для поиска связанных имен процедур для сообщения stopped in, команды func и обратной трассировки.

(dbx) stepi
stopped in proc_d at 0x1000061c = fdpr[0x10000278]
0x1000061c (???) 9421ffc0       stwu   r1,-64(r1)
(dbx)

В предыдущем примере dbx указывает, что выполнение программы было остановлено в функции proc_d с адресом 0x1000061c в переупорядоченном текстовом разделе, который первоначально располагался по адресу 0x10000278. Дополнительная информация о fdpr содержится в описании команды fdpr.

Просмотр команд ассемблера

Для просмотра набора команд из исходного файла предназначена команда listi программы dbx. В режиме по умолчанию программа dbx выдает список команд для архитектуры, в которой она работает. Можно переопределить режим по умолчанию с помощью переменных $instructionset и $mnemonics команды dbx set.

Дополнительная информация о просмотре и дизассемблировании команд приведена в описании команды listi программы dbx. Дополнительная информация о переопределении режима по умолчанию приведена в описании переменных $instructionset и $mnemonics команды dbx set.

Связанная информация

Программа символьной отладки dbx - Обзор

Работа с программой отладки dbx

Просмотр и редактирование исходного файла с помощью программы отладки dbx

Проверка программных данных

Настройка среды отладки dbx


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]