Ранняя разработка Unix происходила на системах PDP компании DEC, на которых имелся очень простой отладчик ODT (Octal Debugging Technique). В программах ODT поддерживался совершенно примитивный синтаксис: каждая команда состояла из восьмеричного адреса слова физической памяти, за которым следовал одиночный символ («B» для установки точки прерывания или слеш («/») для чтения и, возможно, записи содержимого в эту ячейку памяти) (см. рис. 2A).
Итак, появился небольшой язык. Синтаксис ODT, очевидно, повлиял на вид первого отладчика новой системы Unix, разрабатывавшейся на PDP. Этот отладчик назвали просто db. Ко времени Unix V3 в 1971 г. в командном синтаксисе db были заимствованы основные черты языка ODT, который начал расширяться за счет использования дополнительных символов для определения режимов адресации и вариантов форматирования вывода, как показано на рис. 2B.
К 1980 г. db был заменен на adb, который был включен в описание AT&T SVR3 Unix. За это время в языке появилось несколько новых отладочных команд. Теперь поддерживались не только простые адреса, но и арифметические выражения (например, допустимой конструкцией стала «123+456 /»). Кроме того, символ после «/» теперь обозначал формат, а символ после «$» – действие. Синтаксис adb показан на рис. 2C.
Особенно интересной была конструкция «$<» для чтения внешнего командного файла, поскольку она обеспечила возможность разработки примитивных adb-программ, или макросов, в которых выполнялись последовательности команд, отображающих содержимое структур данных языка C по заданным адресам памяти. Т.е. для отображения структуры данных ядра proc нужно было взять ее адрес и затем ввести $ для выполнения предопределенной последовательности команд, отображающих содержимое памяти, в которой располагалась структура данных языка C, описывающая соответствующий процесс. Вид макроса proc в SunOS 4 образца 1984 г. показан на рис. 3. Для облегчения понимания вывода теперь стало позволяться дописывать к команде «/» в кавычках символы перехода на новую строку («n») и табуляции («16t»), которые включались в выводимые данные макроса.