lib: lib(file1.o) lib(file2.o) lib(file3.o)
@echo lib is now up-to-date
.c.a:
$(CC) -c $(CFLAGS) $<
$(AR) $(ARFLAGS) $@ $*.o
rm -f $*.o
Фактически, правило .c.a, приведенное выше, встроено в make. Более интересный, но более ограниченный пример конструкции, поддерживающей работу с библиотеками:
lib: lib(file1.o) lib(file2.o) lib(file3.o)
$(CC) -c $(CFLAGS) $(?:.o=.c)
$(AR) $(ARFLAGS) lib $?
rm $? @echo lib is now up-to-date
.c.a:;
Здесь используется режим подстановки расширений макросов. Список $? определен как множество имен об ектных файлов (в библиотеке lib), чьи исходные C-файлы были изменены. Подстановка заменяет .o на .c. (К сожалению, нельзя еще трансформировать в .c~; однако, это может стать возможно в будущем). Заметим также, что запрещается правило .c.a:, создающее каждый об ектный файл один за другим. Эта конструкция значительно ускоряет обновление библиотек, но становится весьма громоздкой, если библиотека содержит как программы на C, так и на ассемблере.
Dызываетcz ADB, выполняя adb (1) команду. Синтаксис:
adb [-w] [-k] [-Idir] [-Ppid ] [objfile [corefile]
Где:
-w Разрешает запись в объектный файл.
-k Сообщает ADB, что объектные и основные файлы являются файлами ядра, так что ADB может исполнять соответствующее управление памятью.
-Idir Определяет каталоги , который содержит команды для ADB.
-Ppid "Принимают" уже процесс выполнения для отладки.
objfile Называет выполнимый объектный файл.
corefile Называет основной загрузочный модуль.
Обычно, вызывая ADB:
adb a.out core
Или более просто:
adb
Потому что настройка по умолчанию для объектного файла - a.out, и core файл - core.
Поставка знаку "минус" (-) для средств названия(имени) файла " игнорирует этот параметр, " как в:
adb a.out -
Чтобы записывать в объектный файл при игнорировании core файла, можна напечатать:
adb -w a.out -
Чтобы отлаживать выполняющийся в настоящее время процесс, вызовите ADB, печатая:
adb -Ppid a.out
Pid или " идентификатор процесса " может быть получен, используя ps (1) команда.
Потому что ADB прерывает нажатия клавиши, Вы не можете использовать сигнал выхода из, чтобы выйти от ADB. Вы должны использовать явный запрос ADB $q или $Q (или CONTROL D) чтобы выйти от ADB.
Вы работаете в интерактивном режиме с ADB, вводя запросы.
Общая форма для запроса:
[address] [,count] [command] [modifier]
ADB поддерживает текущий адрес, называемый "точкой". Этот адрес подобен в функции к текущему указателю в HP-UX редакторе, vi (1). Когда Вы указываете address, ADB устанавливает точку к тому расположению. ADB тогда выполняет команду command count раз. Вы можете вводить address и count как выражения. Вы создаете эти выражения от символов в пределах программы, которую Вы можете проверять и от десятичного числа, восьмеричных, и шестнадцатеричных целых чисел. Вот списки различных операторы для формирующихся выражений.
Оператор Операция
+ Добавление
- Вычитание или Отрицание
* Умножение
% Целочисленный раздел(деление)
~ Одноместный НЕ
& Поразрядный И
| Поразрядный Содержащий ИЛИ
* Серия к следующему множителю
ADB исполняет арифметические операции на всех 32 битах.
ADB "помнит" последний(прошлый) набор оснований системы счисления. Вы можете изменять(заменять) текущее основание системы счисления с $o, $d, или $x команды. В течение запуска, заданное по умолчанию основание системы счисления шестнадцатерично. Если Вы изменяете(заменяете) основание системы счисления к десятичному числу, весь последующий ввод и вывод целых чисел интерпретируется как десятичное число, пока другой спецификатор основания системы счисления не используется.
Таблица 2 списка некоторые обычно использовала команды ADB и их значение.
Команда Описание
? Печатает содержание от objfile.
/ Печатает содержание от corefile.
= Печатает значение "точки" (.) (адресс) .
: Контрольной точки останова .
$ Разные запросы.
; Разделитель команд.
! Выйти в Шелл.
CONTROL C Заканчивает любую команду ADB.
Отображение Информации
Вы можете запросить ADB расположения или в объектном файле или core файле. Запрос (?) показывает содержание объектного файла, в то время как / запрос исследует core файл. Как только Вы инициализируете процесс (использование или:r или команда:e), или ? или / обращаются к расположениям в адресном пространстве выполняющего процесса.
После любого? или / запросов, Вы можете определить формат, что ADB должен использовать, чтобы печатать эту информацию. Таблица 3 списка некоторые обычно используемые команды формата.
Команда Описание
c Один байт как символ.
b Один байт как шестнадцатеричное значение.
x Два байта в шестнадцатеричном.
X Четыре байта в шестнадцатеричном.
d Два байта в десятичном числе.
f Четыре байта в единственном(отдельном) с плавающей запятой.
F Восемь байтов в двойном с плавающей запятой.
i Команда Precision Architecture HEWLETT-PACKARD.
s Символьная строка С нулевым символом в конце.
a Печатать в символической форме.
n Печатать newline.
r Печатать пустое пространство.
^ Резервируют точку.
Например, чтобы печатать первый шестнадцатеричный элемент массива длинных целых чисел, названных ints, Вы напечатали бы запрос:
ints/X
Этот запрос устанавливает значение точки к значению таблицы идентификаторов ints. Это также устанавливает значение точечного приращения к четыре. " Точечное приращение " является числом байтов, которые ADB печатает в требуемом формате.
В другом примере, чтобы печатать первые четыре байта как шестнадцатеричный номер послепоследующих четыре байта как десятичное число, Вы напечатали бы запрос:
ints/XD
В этом случае, ADB все еще устанавливает точку к ints, но точечное приращение - теперь восемь байтов.
Команда newline - специальная команда, которая повторяет предыдущую команду. Команда newline также использует значение точечного приращения, но команда не может всегда иметь значение. В этом контексте, однако, это означает повторять предыдущую команду, используя индекс одних и адрес точки плюс точечное приращение. Так, в этом случае(регистре), команда newline устанавливает точку к ints + 0x8 и печатает два длинных целого числа: первый как шестнадцатеричный номер и второй как десятичное число. Вы можете также повторить команду newline так часто как хотите. Например, Вы могли бы использовать эту методику, чтобы просмотреть разделы памяти.
При использовании этого примера, чтобы иллюстрировать другой пункт, Вы можете печатать первые четыре байта в длинном шестнадцатеричном формате и следующих четырех байтах в байте шестнадцатеричный формат, печатая запрос:
ints/X4b
Как эти примеры, Вы можете предшествовать любой команде формата с десятичным символом повторения.
Кроме того, Вы можете использовать параметр индекса запроса ADB, чтобы повторить, полный формат командует определенным числом раз. Например, чтобы печатать три строки, использующие вышеупомянутый формат, Вы напечатали бы запрос:
ints, 3/X4bn
(n в конце команды печатает перевод каретки, который делает вывод более легким для чтения.)
В этом примере, ADB устанавливает значение точки к ints + 0x10, скорее чем ints. Это случается, потому что каждый раз ADB заново выполняет команду формата, это устанавливает точку к точке плюс точечное приращение. Поэтому, значение точки - значение, которое точка имела в начале последнего(прошлого) выполнения команды формата. Точечное приращение - размер требуемого формата (в этом случае(регистре), восемь байтов). Команда newline в это время установила бы точку в ints + 0x18 и печать только одно повторение(копия) формата, потому что значение индекса сброшено к одному.
Чтобы проверять текущее значение точки, Вы можете напечатать запрос:
. = a
= команда может печатать значение адреса в любом формате.
Вы можете также использовать = команду, чтобы конвертировать(преобразовать) от одного ядра до другого. Например, Вы можете печатать значение "0x32" в восьмеричном, шестнадцатеричном, и представление десятичных чисел, печатая:
0x32 = oxd
ADB "помнит" сложный формат просьбы о каждом из?, /, и = команды. Например, после ввода предыдущего запроса, Вы можете печатать значение "0x64" в восьмеричном, шестнадцатеричном, и представление десятичных чисел, печатая:
0x64 =
Тогда, потому что последний введенный / команда была ints/X4b, Вы можете напечатать:
ints/
Печатать четыре байта в длинном шестнадцатеричном формате и четырех байтах в байте шестнадцатеричный формат.
Команда Описание
$b Печатают текущие контрольные точки.
$c Печать располагает в стеке след.
$d Основание системы счисления значения по умолчанию Набора, чтобы адресовать параметр.
$e Печатают внешние переменные.
$f Регистраторы С плавающей точкой как единственная(отдельная) точность.
$F Регистраторы С плавающей точкой как двойная точность.
$m Печатают карты сегмента ADB.
$r Печатают общих регистраторов.
$s Смещение Набора для соответствия символа.
$v Печатают ADB переменные.
$w Вывод Набора выравнивает ширину.
Рекомендуеться также посмтотреть на лучший Отладчик под Unix:
http://www.kiarchive.ru/pub/gnu/gnu-mirror/Manuals/ddd/html_mono/ddd.html
XDB – отладчик для отлаживания програм написаных на языках C, HP FORTRAN, HP Pascal, and C++ и понимает следующие команды:
xdb [-d dir] [-r file] [-R file] [-p file] [-P process_ID] [-L] [-l library]
[-i file] [-o file] [-e file] [-S num] [-s] [objectfile [corefile]]