Администрирование локальных сетейРефераты >> Программирование и компьютеры >> Администрирование локальных сетей
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, так и на ассемблере.
Отладчик ADB
Вызов ADB
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 В интерактивном режиме
Вы работаете в интерактивном режиме с 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 и их значение.
Обычно Используемый 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 так часто как хотите. Например, Вы могли бы использовать эту методику, чтобы просмотреть разделы памяти.