Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_ПОА_2005_Builder.doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
1.26 Mб
Скачать

Библиографический список

  1. Архангельский АЯ Программирование в C++Builder 6. – М: ЗАО «Издательство БИНОМ», 2003 – 1152 с – С 97–113

Лабораторная работа 3 Отладка приложений Компиляция и компоновка проекта

Компиляция с последующим выполнением приложения осуществляется командой Запуск|Запустить или соответствующей быстрой кнопкой или «горячей» клавишей F9. В этом случае производится компиляция программы ее компоновка (соединение) и, если не будут обнаружены неисправимые ошибки то создается выполняемый модуль .exe и запускается на выполнение

В процессе компиляции и компоновки на экране появляется окно в верхней строке которого выводится имя компилируемого проекта во второй строке – текущая операция (компиляция определенного модуля или компоновка) в третьей строке – текущая строка модуля обрабатываемая компилятором и общее число строк в модуле в нижней строке отображается обнаруженное на данный момент число замечаний предупреждений и ошибок Клавиша Отмена позволяет прервать процесс компиляции и компоновки

При компиляции проекта состоящего из нескольких модулей компилируются только те модули тексты которых были изменены с момента предыдущей компоновки проекта Это существенно экономит время компиляции

При выполнении команды Запустить можно задать командную строку если приложение предусматривает передачу в него каких-то параметров Для этого надо сначала выполнить команду Запуск|Параметры и в открывшемся окне написать требуемую командную строку

В случаях когда требуется проверить на правильность последние изменения кода не теряя время на выполнение проекта пользуются командами: Проект|Компилировать модуль, Проект|Сделать проект или Проект|Создать проект.

Команда Компилировать модуль выполняет компиляцию только того модуля который выделен в окне Редактора Кода или в Менеджере Проектов и позволяет наиболее быстро проверить наличие ошибок или замечаний Если компиляция прошла успешно создается объектный файл .obj откомпилированного модуля

Команда Сделать проект выполняет компиляцию всех тех модулей проекта тексты которых были изменены с момента предыдущей компоновки проекта Если компиляция прошла успешно создаются объектные файлы модулей .obj и осуществляется компоновка программы Если и она прошла успешно то создается выполняемый модуль .exe Таким образом отличие Сделать проект от Запустить только в том что после компоновки не производится выполнение приложения

Команда Создать проект отличается от Сделать проект только тем что компилируются все модули независимо от того когда они в последний раз изменялись Выполнение этой команды требует наибольшего времени

Есть еще две команды компиляции – для всех проектов группы –Сделать все проекты и Создать все проекты.

Сообщения компилятора и компоновщика

На примере простого приложения с ошибочными операторами выясним какие сообщения об ошибках и какие предупреждения выдает компилятор Начните новое приложение перенесите на форму метку Label и кнопку Button В обработчик щелчка кнопки введите следующие операторы:

void _fastcall TForm1::Button1Click(Tobject *Sender)

{

int i,j;

double A;

for(i=0; i<50;i++)

A*=10000; //Увеличение A в 10000 раз

Label1->Caption = “A = “ +B;

}

Установите режим наиболее удобный для отладки при котором компилятор отображает все свои замечания Для этого в окне опций проекта вызываемом командой Проект|Опции на странице Компилятор в группе опций Предупреждения нужно включить опцию Все. Затем выполните команду Запуск|Запустить или нажмите соответствующую быструю кнопку или нажмите клавишу F9.

Внизу окна Редактора Кода появятся сообщения о замечаниях и ошибках Первое сообщение:

[C++ Warning] Unit1.cpp (23): W8013 Possible use of ‘A’ before definition

([C++ Предупреждение] модуль Unit1.cpp строка 23: W8013 Переменная ‘A возможно используется до того как ей присвоено значение)

Это предупреждение о том что переменная A не инициализирована и ее значение к моменту первого выполнения оператора в строке 23 не определено Чтобы узнать что это за строка нужно дважды щелкнуть на этом предупреждении В окне Редактора Кода выделится соответствующая строка:

A*=10000; //Увеличение A в 10000 раз

Следовательно объявление переменной нужно изменить так:

double A=1;

Чтобы в переменной A накапливался результат при каждом щелчке на кнопке сделаем ее глобальной

Перейдем к второму сообщению компилятора:

[C++ Error] Unit1.cpp (24) : E2451 Undefined symbol ‘B’

([C++ Ошибка] модуль Unit1.cpp строка 24: E2451 Необъявленный идентификатор ‘B’)

Это уже сообщение об ошибке В операторе

Label1->Caption = “A = “ +B;

вместо переменной A указана переменная B которая не была объявлена Строка кода с этой ошибкой выделена в окне Редактора Кода, и курсор остановился около необъявленного идентификатора

Поскольку ошибка неисправима выполняемый модуль не формируется и приложение не выполняется

Третье сообщение компилятора:

[C++ Warning] Unit1.cpp (25): W8080 ‘j’ is declared but never used

([C++ Предупреждение] модуль Unit1.cpp строка 25: W8080 Переменная ‘j’ объявлена но нигде не используется)

Объявление переменной j как ненужной нужно удалить из текста

Последнее сообщение компилятора:

[C++ Warning] Unit1.cpp (25): W8057 Parameter ‘Sender’ is never used

([C++ Предупреждение] модуль Unit1.cpp строка 25: W8057 Параметр ‘Sender’ нигде не используется)

Параметр Sender передается в обработчик событий и является компонентом в котором произошло событие В данном обработчике он не нужен поэтому это предупреждение можно игнорировать

Итак приложение не откомпилировалось из-за ошибки с использованием необъявленной переменной B

После исправления в ошибочном операторе переменной B на A появится новое сообщение об ошибке:

[C++ Error] Unit1.cpp (24) : E2060 Illegal use of floating point

([C++ Ошибка] модуль Unit1.cpp строка 24: E2060 Недопустимое использование плавающей точки)

В правой части оператора Label1->Caption = “A = “ +A;

складываются строка A = и переменная с плавающей точкой A Это ошибка использования несовместимых типов

После всех исправлений код примет вид

double A=1;

void _fastcall TForm1::Button1Click(Tobject *Sender)

{

int i;

for(i=0; i<50;i++)

A*=10000; //Увеличение A в 10000 раз

Label1->Caption = “A = “ + FloatToStr(A);

}

Теперь откомпилируем приложение и выполним его

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]