"Адское" программирование Ada-95 -Компилятор GNAT

         

Директивы компилятора для отладки



Директивы компилятора для отладки

GNAT предусматривает две директивы компилятора, которые могут быть полезны при отладке программ:

Директива Описание

pragma Assert (условие);  -  Вставить условие контрольной проверки
pragma Debug (имя_процедуры);  -  Указание необходимости выполнения вызова отладочной процедуры

Следует заметить, что для активации использования этих директив, необходимо указать опцию командной строки компилятора -gnata при компиляции исходных текстов.В тех случаях, когда при компиляции исходных текстов опция -gnata не указана, GNAT будет просто игнорировать присутствие этих директив.Таким образом, это позволяет легко компилировать окончательно отлаженную, правильно работающую версию программы, которая предназначена для публичного использования, без необходимости удаления инструкций отладки из исходных текстов программы.

Директива компилятора Assert позволяет осуществлять проверку истинности некоторых условий в процессе выполнения программы.Если указанные условия ложны, то осуществляется возбуждение исключения.Эту директиву удобно использовать при отладке программы когда над разработкой проекта работает несколько программистов, поскольку в таком случае некоторые условия выполнения программы могут изменяться достаточно часто.Примером использования директивы Assert может служить следующее:

pragma Assert (Screen_Height = 24);

Здесь, если значение переменной Screen_Height не будет равно 24, то будет возбуждено исключение ASSERT_ERROR.

Директива компилятора Debug позволяет осуществлять вызов процедуры, которая предназначена для отладки.Например, она может быть использована на этапе отладки для отображения какой-либо внутренней информации, которая может быть полезна для анализа процесса выполнения программы.Примечательно, что эту директиву компилятора можно поместить в любое место программы, и даже внутрь описания переменной.Например:

X := 5; pragma Debug (Print_To_Log_File( "X is now" & X'Img ));

В данном случае, если предположить, что процедура Print_To_Log_File используется для сохранения сообщения в каком-либо файле протокола (log-файле), то этот пример сохранит в этом файле протокола сообщение "X is now 5".Следует также заметить, что действие директивы компилятора Debug может быть подавлено с помощью директивы Suppress_Debug_Info.

При выполнении отладки программ могут быть полезными еще две директивы компилятора.Директива компилятора No_Return может быть использована для указания подпрограмм, которые никогда не завершаются (иначе, не возвращают управление).Это позволяет подавить соответствующие предупреждающие сообщения компилятора.

Директива компилятора Normalize_Scalars инициализирует любую переменную, которая не является массивом, записью или тэговой записью, недопустимым значением (если это возможно).Применение этой директивы позволяет осуществлять проверку правильности инициализации переменных перед тем как они будут использованы (при этом, ее следует размещать в начале подпрограммы или пакета).

В качестве примера, предположим, что существует целочисленная переменная, диапазон значений которой ограничен величинами от 1 до 10Обычно Ада не осуществляет установку начальных значений, пока это не указано явно.При указании директивы Normalize_Scalars, такая переменная будет инициализирована каким-либо начальным значением, величина значения которого будет заведомо находиться вне указанного диапазона значений (например, -1).Таким образом, попытка использования значения этой переменной без предварительной инициализации приведет к возбуждению исключения CONSTRAINT_ERROR.

Следует заметить, что директива Normalize_Scalars будет работать лучше если при компиляции исходных текстов использована опция компилятора -gnatVf.



Содержание раздела








Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий