Примечание: пример программы adbsamp3, рассматриваемый в данном разделе, содержит бесконечную рекурсию. При попытке выполнить эту программу до конца возникнет страничная ошибка, которая приведет к аварийному завершению программы.
Ниже приведен пример выполнения программы под управлением adb, демонстрирующий основные операции отладки. Описание этих операций приведено в следующих разделах.
Исходная программа для данного примера хранится в файле с именем adbsamp3.c. С помощью команды cc откомпилируйте этот файл и создайте исполняемый файл adbsamp3:
cc adbsamp3.c -o adbsamp3
Для запуска сеанса отладки и открытия файла с программой введите следующую команду (файл дампа не используется):
adb adbsamp3
Установите точки прерывания в начале каждой функции с помощью команды :b:
.f:b .g:b .h:b
Просмотрите первые пять команд функции f:
.f,5?ia .f: .f: mflr r0 .f+4: st r0, 0x8(r1) .f+8: stu r1, -64(r1) .f+c: st r3, 0x58(r1) .f+10: st r4, 0x5c(r1) .f+14:
Просмотрите первые пять команд функции g без указания адресов:
.g,5?i .g: mflr r0 st r0, 0x8(r1) stu r1, -64(r1) st r3, 0x58(r1) st r4, 0x5c(r1)
Для запуска программы введите команду
:r adbsamp3: running breakpoint .f: mflr r0
Программа adb будет выполнять пример программы до первой точки прерывания. В этот момент она остановится.
Поскольку при выполнении программы до этой точки прерывания ошибок не произошло, первую точку прерывания можно удалить:
.f:d
Для возобновления работы программы введите команду :c:
:c adbsamp3: running breakpoint .g: mflr r0
Программа adb продолжит выполнение adbsamp3 со следующей команды. Она снова остановится, когда дойдет до следующей точки прерывания.
Для трассировки последовательности выполнения введите команду
$c .g(0,0) .f+2a .f(1,1) .main+e .main(0,0,0) start+fa
Команда $c выдаст отчет, в котором будут показаны три активные функции: main,f и g.
Для просмотра значения целочисленной переменной fcnt введите следующую команду:
fcnt/D fcnt: fcnt: 1
Затем продолжите выполнение программы и пропустите первые 10 точек прерывания:
,10:c adbsamp3: running breakpoint .g: mflr r0
Программа adb запустит программу adbsamp3 и снова выдаст сообщение о выполнении. Выполнение не прекратится до тех пор, пока не будут пройдены ровно 10 точек прерывания. Для того чтобы убедиться, что эти точки прерывания были пропущены, просмотрите информацию о трассировке:
$c .g(0,0) .f+2a .f(2,11) .h+28 .h(10,f) .g+2a .g(11,20) .f+2a .f(2,f) .h+28 .h(e,d) .g+2a .g(f,1c) .f+2a .f(2,d) .h+28 .h(c,b) .g+2a .g(d,18) .f+2a .f(2,b) .h+28 .h(a,9) .g+2a .g(b,14) .f+2a .f(2,9) .h+28 .h(8,7) .g+2a .g(9,10) .f+2a .f(2,7) .h+28 .h(6,5) .g+2a .g(7,c) .f+2ae .f(2,5) .h+28 .h(4,3) .g+2a .g(5,8) .f+2a .f(2,3) .h+28 .h(2,1) .g+2a .g(2,3) .f+2a .f(1,1) .main+e .main(0,0,0) start+fa
Применение выражений в программе adb
Просмотр и редактирование исходного файла с помощью программы adb
Пример программы adb: adbsamp2
Пример программы adb: adbsamp3