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

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


Программа отладки adb - справочная информация

Для организации и управления данными программа отладки adb использует адреса, выражения, операторы, команды и переменные.

Адреса в программе отладки adb

Адрес в файле, соответствующий указанному адресу, определяется по схеме, связанной с выбранным файлом. Каждая схема представлена двумя тройками (B1, E1, F1) и (B2,E2, F2). Параметр Адрес_в_файле, соответствующий указанному параметру Адрес, вычисляется следующим образом:

B1<=Адрес<E1=>Адрес_в_файле=Адрес+F1-B1

или

B2<=Адрес<E2=>Адрес_в_файле=Адрес+F2-B2

Параметр Адрес должен принадлежать диапазону B1-E1 или B2-E2. В некоторых случаях, например, в программах с разделенными областями I и D, два сегмента для одного файла могут перекрываться. Если после команды ? (вопросительный знак) или / (косая черта) указан символ * (звездочка), то применяется только вторая тройка.

Начальный вид обеих схем может применяться для стандартных файлов a.out и core. Если какой-либо из этих файлов заменен на другой, то для него параметры B1 и F1 будут равны 0, а для параметра E1 будет задан максимальный размер файла. В этом случае весь файл может быть просмотрен без преобразования адресов.

Выражения в программе отладки adb

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

. (точка) Указывает последний адрес, заданный для команды. Последний адрес также называется текущим адресом.
+ (плюс) Увеличивает значение . (точку) на текущее приращение.
^ (символ вставки) Уменьшает значение . (точку) на текущее приращение.
" (двойные кавычки) Указывает последний адрес, напечатанный командой.
Целое_число Задает восьмеричное число, если начинается с 0o, шестнадцатеричное - если с 0x или #, и десятичное - если с 0t. В остальных случаях это выражение задает число, интерпретируемое в текущей системе счисления. Первоначально основание системы счисления равно 16.
`Cccc' Задает значение ASCII длиной до 4 символов. Вместо символа ' (апостроф) может применяться символ \ (обратная косая черта).
<Имя Считывает текущее значение параметра Имя. Параметр Имя задает имя переменной или имя регистра. Команда adb обрабатывает переменные, имена которых состоят из одной буквы или цифры. Если параметр Имя задает имя регистра, то значение в этом регистре определяется из системного заголовка параметра Файл_дампа. Вы можете просмотреть допустимые имена регистров с помощью команды $r.
Символ Задает последовательность прописных и строчных букв, знаков подчеркивания или цифр, причем первым символом не может быть цифра. Значение параметра Символ определяется из таблицы символов в параметре Объектный_файл. При необходимости параметр Символ может начинаться с символа _ (знак подчеркивания).
.Символ Задает точку входа функции, указанной в параметре Символ.
Процедура.Имя Задает адрес параметра Имя в указанной процедуре на языке C. Процедура и Имя являются параметрами типа Символ. Если параметр Имя пропущен, то это значение задает адрес активизированного последним кадра стека C, соответствующего параметру Процедура.
(Выражение) Задает значение выражения.

Операторы в программе отладки adb

Целые числа, символы, переменные и имена регистров можно комбинировать в выражениях с помощью следующих операторов:

Унарные операторы
*Выражение Возвращает содержимое расположения, заданного параметром Выражение, в параметре Файл_дампа.
@Выражение Возвращает содержимое расположения, заданного параметром Выражение, в параметре Объектный_файл.
-Выражение Изменяет знак целочисленного выражения.
~Выражение Выполняет поразрядное отрицание.
#Выражение Выполняет логическое отрицание.

Бинарные операторы
Выражение1+Выражение2 Выполняет целочисленное сложение.
Выражение1/Выражение2 Выполняет целочисленное вычитание.
Выражение1*Выражение2 Выполняет целочисленное умножение.
Выражение1%Выражение2 Выполняет целочисленное деление.
Выражение1&Выражение2 Выполняет поразрядную конъюнкцию.
Выражение1|Выражение2 Выполняет поразрядную дизъюнкцию.
Выражение1#Выражение2 Округляет параметр Выражение1 до ближайшего кратного параметра Выражение2.

Бинарные операторы выполняются слева направо и имеют меньший приоритет, чем унарные.

Команды в программе отладки adb

Команды ? (вопросительный знак) и / (косая черта) позволяют просмотреть содержимое сегмента текста или данных. Команда = (знак равенства) показывает заданный адрес в указанном формате. Команды ? и / могут применяться с последующим знаком * (звездочка).

?Формат Показывает содержимое параметра Объектный_файл, начиная с параметра Адрес. Значение . (точки) увеличивается на сумму приращений всех символов формата.
/Формат Показывает содержимое параметра Файл_дампа, начиная с параметра Адрес. Значение . (точки) увеличивается на сумму приращений всех символов формата.
=Формат Показывает значение параметра Адрес. Буквы формата i и s игнорируются этой командой.

Параметр Формат состоит из одного или нескольких символов, определяющих стиль печати. Перед каждым символом формата можно указать десятичное целое число - его счетчик повторений. При пошаговой обработке формата . (точка) увеличивается на значение, заданное для каждого символа формата. Если формат не задан, то принимается последний применявшийся формат.

Допустимы следующие символы формата:

a Печатает значение . (точки) в символьной форме. При этом выполняется проверка типов символов.
b Печатает адресуемый байт как число без знака в текущей системе счисления.
c Печатает адресуемый символ.
C Печатает адресуемый символ в соответствии со следующими соглашениями об escape-символах:
  • Символы печатаются в виде знака ~ (тильда), после которого следует соответствующий печатаемый символ.
  • Непечатаемые символы печатаются в следующем виде: ~ (тильда) <Число>, где Число - шестнадцатеричное значение символа. Символ ~ печатается в виде ~ ~ (две тильды).
d Печатает числа в десятичном формате.
D Печатает числа в длинном десятичном формате.
f Печатает 32-разрядные числа в формате с плавающей точкой.
F Печатает числа в формате двойной длины с плавающей точкой.
i Число Число - это длина инструкции в байтах.
n Печатает новую строку.
o Печатает 2 байта в восьмеричном формате.
O Печатает 4 байта в восьмеричном формате.
p Печатает адресуемое значение в символьной форме в соответствии с теми же правилами символьного представления, что и для буквы формата a.
q Печатает 2 байта как число без знака в текущей системе счисления.
Q Печатает 4 байта как число без знака в текущей системе счисления.
r Печатает пробел.
s Число Печатает адресуемый символ до обнаружения нуля.
S Число Печатает строку в соответствии с соглашением о замене escape-символов знаком ~ (тильда). Переменная Число задает длину строки с учетом конечного нуля.
t При наличии предшествующего целого числа выполняет переход к следующей позиции табуляции, определяемой этим числом. Например, команда форматирования 8t перемещает на следующую позицию табуляции через 8 пробелов.
u Печатает десятичное число без знака.
U Печатает длинное десятичное число без знака.
x Печатает 2 байта в шестнадцатеричном формате.
X Печатает 4 байта в шестнадцатеричном формате.
Y Печатает 4 байта в формате даты.
/ Локальный или глобальный символ данных.
? Локальный или глобальный символ текста.
= Локальный или глобальный абсолютный символ.
"..." Печатает строку, указанную в кавычках.
^ Уменьшает . (точку) на текущее приращение. Печать не выполняется.
+ Увеличивает . (точку) на единицу. Печать не выполняется.
- Уменьшает . (точку) на единицу. Печать не выполняется.
newline Повторяет предыдущую команду с увеличением значения Счетчик на 1.
[?/]lЗначение Маска    Применяет к словам, начинающимся с . (точки), маску, заданную параметром Маска, и выполняет сравнение с параметром Значение до тех пор, пока не будет найдено точное соответствие. Если указано L, то за один раз проверяется 4 байта, а не 2. Если найти соответствие не удается, то значение . (точка) останется прежним, в противном случае оно будет установлено равным найденному расположению. Если параметр Маска опущен, то по умолчанию принимается значение -1.
[?/]wЗначение... Записывает 2-байтовый параметр Значение в адресуемое расположение. Если задана команда W, то будут записаны 4 байта, а если команда V - то 1 байт. При вызове команды w или W могут применяться ограничения, связанные с выравниванием.
[,Счетчик][?/]m B1 E1 F1[ ?/] Записывает новые значения для параметров B1,E1 и F1. Если выражений меньше трех, то остальные параметры схемы изменены не будут. Если после ? (вопросительного знака) или / (косой черты) указан символ * (звездочка), то будет изменен второй сегмент (B2, E2, F2) схемы. Если список завершается символом ? или /, то для обработки последующих запросов будет применен файл Объектный_файл или Файл_дампа, соответственно. (Например, при выполнении команды /m? символ / указывает на файл Объектный_файл. Если указан параметр Счетчик, то команда adb изменяет схемы, связанные только с данным файлом или библиотекой. Команда $m показывает счетчик, соответствующий конкретному файлу. Если параметр Счетчик не указан, то будет принято значение по умолчанию - 0.
>Имя Присваивает . (точку) переменной или регистру, заданным параметром Имя.
! Вызывает оболочку для чтения строки, следующей за символом ! (восклицательный знак).
$Модификатор Различные команды. Для Модификатор возможны следующие значения:

<Файл
Считывает команды из указанного файла и возвращается к стандартному вводу. Если счетчик равен 0, то команда будет проигнорирована. До выполнения первой команды из указанного файла значение счетчика помещается в переменную adb 9.

<<Файл
Считывает команды из указанного файла и возвращается к стандартному вводу. Команду <<Файл можно вызвать в файле, не закрывая его. Если счетчик равен 0, то команда будет проигнорирована. До выполнения первой команды из указанного файла значение счетчика помещается в переменную adb 9. Переменная adb 9 сохраняется перед вызовом команды <<Файл и восстанавливается после ее завершения. Число команд <<Файл, вызываемых одновременно, ограничено.

>Файл
Направляет вывод в указанный файл. Если параметр Файл опущен, то будет создан стандартный вывод. Если параметр Файл не существует, то он будет создан.

b
Печатает все точки прерывания и связанные с ними счетчики и команды.

c
Печатает список кадров стека. Если задан параметр Адрес, то он принимается в качестве адреса текущего кадра (вместо регистра указателя кадра). Если указана буква формата C, то будут напечатаны имена и значения всех автоматических и статических переменных для всех активных функций. Если указан параметр Счетчик, то будет напечатано только задаваемое им число кадров.

d
Устанавливает текущее основание системы счисления равным значению Адрес, либо 16, если адрес не указан.

e
Печатает имена и значения внешних переменных. Если задан счетчик, то будут напечатаны только те внешние переменные, которые связаны с печатаемым файлом.

f
Печатает регистры с плавающей точкой в шестнадцатеричном формате.

iнабор_инструкций
Выбирает набор инструкций для дизассемблирования.

I
Изменяет каталог по умолчанию, задаваемый флагом -I, на значение параметра Имя.

m
Печатает схему адресов.

nнабор-мнемоник
Выбирает мнемоники для дизассемблирования.

o
Устанавливает основание системы счисления равным 8.

q
Завершает выполнение команды adb.

r
Печатает основные регистры и инструкции, адресуемые iar, а также устанавливает . (точку) равной iar. Параметр Номер$r печатает регистр, задаваемый переменной Номер. Параметр Номер,Счетчик$r печатает регистры Номер+Счетчик-1,...,Номер.

s
Устанавливает ограничение на число символьных совпадений для значения Адрес. Значение по умолчанию - 255.

v
Печатает все ненулевые переменные в восьмеричном формате.

w
Задает ширину страницы вывода для параметра Адрес. Значение по умолчанию - 80.

P Имя
Вводит значение Имя в строку приглашения.

?
Печатает ИД процесса, сигнал, вызвавший остановку или завершение, и регистры $r.
:Модификатор Управляет подпроцессом. Допустимы следующие модификаторы:

bКоманда
Задает точку прерывания в параметре Адрес. Всего точка прерывания запускается Счетчик-1 раз. При каждом прохождении точки прерывания вызывается указанная команда. Если эта команда установит . (точку) рядом со значением 0, то выполнение программы в этой точке будет остановлено.

cСигнал
Продолжает подпроцесс указанным сигналом. Подпроцесс будет продолжен с адреса, заданного параметром Адрес (если он указан). Если сигнал не указан, то будет передан сигнал, вызвавший остановку процесса. Пропуск точек прерывания выполняется так же, как и в случае модификатора r.

d
Удаляет точку прерывания в параметре Адрес.

k
Останавливает текущий подпроцесс, если он выполняется.

r
Запускает программу, указанную в параметре Объектный_файл, в качестве подпроцесса. Если параметр Адрес задан явно, то программа будет запущена с этой точки. В противном случае программа будет запущена со стандартной точки входа. Параметр Счетчик задает количество точек входа, которое будет проигнорировано до остановки подпроцесса. Аргументы для подпроцесса можно задать в одной строке с командой. Аргумент, начинающийся с символа < или >, задает стандартный ввод или вывод. В начале выполнения подпроцесса все сигналы включены.

sСигнал
Продолжает пошаговое выполнение подпроцесса. Число шагов задается параметром Счетчик. Если в настоящее время никакие подпроцессы не выполняются, то в качестве подпроцесса будет запущен указанный Объектный_файл. В этом случае сигналы передаваться не будут. Остаток строки передается подпроцессу в качестве аргументов.

Переменные в программе отладки adb

В команде adb можно задать некоторые переменные. При запуске программы adb значения для перечисленных ниже переменных берутся из системного заголовка в указанном файле дампа. Если файл дампа (core) задается не параметром файл-дампа, то эти значения берутся из параметра объектный-файл:

0 Последнее напечатанное значение
1 Последний блок смещения в источнике инструкций
2 Предыдущее значение переменной 1
9 Счетчик последней команды $< или $<<
b Базовый адрес сегмента данных
d Размер сегмента данных
e Адрес входа программы
m Сигнатура
s Размер сегмента стека
t Размер текстового сегмента

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

Команда adb

Обзор программы отладки adb

Применение выражений в программе adb

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

Выражения в программе отладки adb

Операторы в программе отладки adb

Команды в программе отладки adb

Переменные в программе отладки adb


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