|
Cтраница 13 из 21
Снятие контрольной точки происходит тривиально — восстанавливается содержимое по соответствующему адресу и строка данной точки выбрасывается из таблицы.
Контрольные точки могут устанавливаться на какое-то количество прохождений — в таблицу включается позиция счетчика, куда вносится какое-то число, и при каждом прохождении через данную контрольную точку из счетчика будет вычитаться единица, а по достижении нуля точка будет снята.
Итак, мы обсудили с точностью до некоторых деталей структуру адресного отладчика.
Если возникает необходимость символьной отладки (отладки в терминах языка высокого уровня), то добавляются некоторые средства, позволяющие определять адреса и свойства переменных и адреса операторов. В этом случае, например, команда чтения языковой переменной программы будет осуществляться следующим образом: если надо найти переменную с именем name, то отладчик ищет ее в таблице, проверяет области видимости и смотрит ее атрибуты. Если переменная статическая, то выбирается ее адрес, и мы обращаемся через ptrace к соответствующей адресной ячейке. Если переменная автоматическая, то через соответствующее смещение относительно стека, мы, читая из контекста вершину стека и прибавляя смещение, читаем нужную переменную. Если переменная регистровая, то в таблице содержится номер регистра, на котором она размещена, соответственно, для ее чтения нам достаточно прочитать из контекста соответствующий регистр. Для изменения содержимого переменных используется этот же аппарат.
Приведем небольшой пример трассировки:
Процесс-сын:
|