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

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


Пример трассировки нескольких функций при отладке посредством adb

Примечание: пример программы adbsamp3, рассматриваемый в данном разделе, содержит бесконечную рекурсию. При попытке выполнить эту программу до конца возникнет страничная ошибка, которая приведет к аварийному завершению программы.

Ниже приведен пример выполнения программы под управлением adb, демонстрирующий основные операции отладки. Описание этих операций приведено в следующих разделах.

Исходная программа для данного примера хранится в файле с именем adbsamp3.c. С помощью команды cc откомпилируйте этот файл и создайте исполняемый файл adbsamp3:

cc adbsamp3.c -o adbsamp3

Запуск программы adb

Для запуска сеанса отладки и открытия файла с программой введите следующую команду (файл дампа не используется):

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)

Запуск программы adsamp3

Для запуска программы введите команду

: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

Пример программы adb: adbsamp2

Пример программы adb: adbsamp3


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