Помимо простых переменных разной разрядности, в программах на Си используются также переменные с плавающей запятой, структуры (struct), объединения или союзы (union), указатели, одномерные и многомерные массивы. Последние могут состоять как из простых объектов, так и из сложных (структур, союзов, указателей).
Использование сложных объектов в программах, безусловно, удобно. Однако ввиду сложности их структуры крайне желательно иметь возможность её адекватного отображения на этапе отладки. В отладчиках фирмы «Фитон» сложные объекты могут отображаться как в сжатом (список значений элементов), так и в развёрнутом виде с указанием адреса, значения и типа каждого элемента массива и / или члена структуры. Реализация указателей в разных компиляторах различна. То, что МК обычно имеет несколько адресных пространств, создает дополнительные трудности, так как при работе с указателем должно быть известно, помимо адреса, и адресное пространство, куда указывает указатель. В некоторых реализациях идентификатор адресного пространства является составной частью значения указателя, в других компилятор заранее «знает» это и генерирует соответствующий код.
Кроме этого, компонент адреса в указателе может быть размером от 8 до 32 бит. При отображении значений указателей отладчик должен «знать» все детали их реализации в каждом компиляторе.
Способы размещения объектов в памяти
Помимо статических объектов, адреса которых не изменяются за время выполнения программы, в программе, написанной на языке высокого уровня, могут существовать так называемые автоматические объекты, память под которые временно отводится в стеке МК. Адреса таких объектов не абсолютны, а определяются динамически на этапе выполнения программы. Обычно они отсчитываются от текущего значения некоторой статической переменной, называемой указателем фрейма стека (Base Pointer или BP). Так как значение BP формируется программой динамически на этапе выполнения, значения автоматических объектов доступны только в пределах их области видимости, то есть при правильном значении BP. Отладчик при отображении значений автоматических объектов должен «знать» способ, которым определяются адреса, а также отслеживать правильность значения BP.
Возможно также временное размещение переменных в регистрах МК. В этом случае отладчик должен «знать», какие переменные в каких регистрах размещены и в течение какого времени. И, наконец, часто встречается ситуация, когда один и тот же объект за время своей жизни меняет способ размещения в памяти, причём не один раз. Это может происходить, например, когда функция получает один или несколько параметров в регистрах, а затем перемещает их в стек.
Область видимости объекта
Как и в ассемблерных, в программах на Си существуют глобальные объекты, доступные по имени из любого модуля, и объекты, локализованные в модуле (эти объекты объявляются как static). Однако автоматические и регистровые переменные создают отладчикам дополнительные трудности при отображении их значений. Дело в том, что, во-первых, время жизни автоматического объекта ограничено его областью видимости, а во-вторых, охватывающие области видимости могут иметь свои автоматические объекты с теми же именами. Проиллюстрируем это на примере функции, имеющей несколько вложенных областей видимости:
void
f (int
а)
{
long
b;
if
(a == 0
) a++;
for
(b = a * 2
; b < 100
; b++)
{
long
с;
long Перейти на страницу: 1 2
Советуем почитать:
Разработка технологического процесса сборки усилителя мощности звуковой частоты Производственный процесс представляет совокупность всех действий людей и орудий производства, необходимых на данном предприятии для изготовления или ремонта РЭА. Технологический проц ...
Разработка цифрового измерителя кровяного давления на микроконтроллере MC68HC908JL3 С развитием микроэлектронной индустрии, а в частности с развитием микроконтроллеров, появилась возможность делать малогабаритные и сравнительно дешёвые электронные изделия. На сегодня ...
Кривые линии и поверхности, их применение в радиоэлектронике и автоматике Кривые линии и поверхности их применение в радиоэлектронике и автоматике. Этот раздел курса имеет особое значение для графической подготовки инженера. Внешняя и внутренняя форма дета ...