Компиляция, компоновка и выполнение проекта
Эти операции можно выполнить или через подменю Build главного окна, или при помощи кнопок панели инструментов, или при помощи комбинации горячих клавиш.
Данное подменю объединяет команды для компиляции, сборки и отладки программ. Рассмотрим основные команды меню Build.
Compile– компиляция выбранного файла, результаты которой выводятся в окно Output.
Build– компоновка проекта. Компилируются все файлы, в которых произошли изменения с момента последней компоновки. После компиляции происходит сборка (link) всех объектных модулей, включая библиотечные, в результирующий исполняемый файл. Сообщения об ошибках компоновки выводятся в окно Output. Если обе фазы компоновки завершились без ошибок, среда программирования создаст исполняемый файл с расширением .ехе (для данного примера: lr1.exe), который можно запустить на выполнение.
Rebuild All – то же, что и Build, но компилируются все файлы проекта независимо от того, были ли в них произведены изменения или нет.
Execute – запуск исполняемого файла, созданного в результате компоновки проекта. Если в исходный текст были внесены изменения, то – перекомпилирование, перекомпоновка и запуск на выполнение.
Операциям Compile, Build и Execute соответствуют первая, вторая и четвертая кнопки панели инструментов Build MiniBar, которая расположена на рабочем столе (см. рис. П 4.3) справа вверху рядом с системными кнопками. Перечислим их с указанием комбинаций горячих клавиш:
Compile = Ctrl+F7
Build = F7
Execute Program = Ctrl+F5
Откомпилируйте проект, например, выбрав щелчком Build. В процессе компиляции в окне вывода Output отображаются диагностические сообщения компилятора и сборщика. И если все в порядке, в последней строке окне вывода будет сообщение
lr1.exe – 0 error(s), 0 warning(s)
Теперь запускаем приложение на выполнение щелчком, например на кнопке Execute Program (Ctrl+F5). Появится окно приложения rl1, изображенное на рис. П 4.4.
Рис. П 4.4
Конфигурация проекта
Visual C++ позволяет строить проект либо в отладочной конфигурации (Win32 Debug), либо в итоговой конфигурации (Win32 Release). Начинать работу нужно в отладочной конфигурации, которая обычно установлена по умолчанию. Для того чтобы проверить, какова текущая конфигурация в проекте, нужно выбрать в подменю Project пункт Settings... Откроется диалоговое окно Project Settings. Смотрим, какое значение установлено в окне комбинированного списка Settings For:.. Если это не Win32 Debug, то переключитесь на нужное значение через команду меню Build/Set Active Configuration...
Но в отладочной конфигурации даже минимальный проект имеет очень большие размеры. Так, только что созданный проект rl1 имеет размер на диске более одного мегабайта. Поэтому после получения финальной версии проект нужно перекомпилировать в итоговой конфигурации (Win32 Release).
Окончание работы над проектом
Для окончания работы над проектом можно выбрать в меню File пункт Close Workspace, а можно просто закрыть приложение Visual C++.
Открытие существующего проекта
Перечислим последовательность действий, необходимых для открытия существующего проекта.
1. Запустить на выполнение среду программирования Visual C++.
2. Выбрать в меню File пункт Open Workspace...
3. В открывшемся диалоговом окне найти папку с нужным проектом, в ней – файл ProjectName.dsw и открыть найденный файл, щелкнув по нему мышью.
Если нужный проект был в работе не так давно, то:
1. Запустить на выполнение Visual C++.
2. Выбрать подменю File, навести курсор мыши на пункт Recent Workspaces.
3. Если в появившемся меню со списком последних файлов, с которыми шла работа, есть файл ProjectName.dsw, щелкнуть по нему мышью.
Или следующим образом:
– не вызывая Visual C++, найти папку с нужным проектом;
– выбрать щелчком мыши файл ProjectName.dsw, – ОС запустит на выполнение среду Visual C++, открыв при этом указанный проект.
Некоторые возможности отладчика Visual C++
При создании проектов в любой среде программирования одним из важнейших этапов работы являются действия по отладке создаваемых программ.
Приведем начальные возможности отладчика Visual C++.
Проще всего это можно сделать следующим образом: написать программу, содержащую несколько ошибок, и после этого при помощи отладчика показать, как найти и исправить эти ошибки.
Напомним, что синтаксические ошибки – это результат нарушения формальных правил написания программы на конкретном языке программирования.
Логические ошибки делят на ошибки алгоритма и семантические ошибки. Причина ошибки алгоритма – несоответствие построенного алгоритма ходу получения конечного результата сформулированной задачи. Причина семантической ошибки – неправильное понимание смысла (семантики) операторов выбранного алгоритмического языка.
Создадим консольное приложение под названием Test1. В программе вычислим сумму первых пяти натуральных чисел (от 1 до 5). В результате должно получиться 15, а текст программы запишем следующий:
#include <stdio.h>
void main()
{
int i, sum, n = 5, a[] = {1, 2, 3, 4, 5};
for(i=1; i<n; i++)
sum += a[i];
printf(“\n Summa = %d\n”, sum);
}
Как видно из текста, синтаксис программы правильный. Учимся отлавливать ошибки. Запускаем программу на выполнение и получаем на экране нечто такое:
Summa = – 858993446
на вашем компьютере может быть и другое число, но мало похожее на 15.
Начинаем отладку программы.
Установка точки прерывания
Точка прерывания позволяет остановить выполнение программы перед любой выполняемой инструкцией для того, чтобы или продолжать дальнейшее выполнение программы, или продолжать программу в пошаговом режиме с целью отладки ее последующих участков, или продолжать выполнение программы в непрерывном режиме до конца программы или следующей точки прерывания.
Для того чтобы установить точку прерывания перед оператором, необходимо установить перед ним текстовый курсор и/или нажать клавишу F9или выбрать щелчком мыши Insert/Remove Breakpoint на панели инструментов Build MiniBar (крайняя правая кнопка). Точка прерывания обозначится в виде красного кружочка на левом поле окна редактирования перед выбранным оператором. Повторный щелчок на указанной кнопке снимает точку прерывания. В программе точек прерывания можно устанавливать столько, сколько нужно.
Выполнение программы до точки прерывания
Программа запускается в отладочном режиме с помощью команды подменю Build: Start Debug > Go(или нажатием клавиши F5).
В результате код программы выполняется до той строки, на которой установлена точка прерывания. После чего программа останавливается и отображает в окне редактора ту часть кода, где находится точка прерывания. При этом появляется желтая стрелка на левом поле, указывающая на ту строку, которая будет выполнена на следующем шаге отладки.
Далее, установив точку прерывания перед оператором for, запустим программу в отладочном режиме, нажав клавишу F5. Программа выполнится до данного оператора и остановится. При этом подменю Build заменилось на меню Debug. Вид экрана изображен на рис. П 5.1.
Рис. П 5.1
Пошаговое выполнение программы
Теперь можно выполнять один за другим операторы оставшейся части программы, нажимая клавишу F10. При этом есть следующие дополнительные возможности.
1. Предположим, что код программы содержит функцию пользователя f1() и что при пошаговом выполнении программы вы дошли до строки, содержащей вызов этой функции.
Возможны две ситуации:
– если необходимо просмотреть код вызываемой функции, то надо нажать клавишу F11;
– если нужен только результат ее выполнения, то надо нажать клавишу F10.
2. Далее, пусть мы проходим код функции f1(), нажав клавишу F11. Нажатие клавиш Shift+F11 обеспечит досрочный выход из нее в точку вызова.
3. Существует возможность пропустить пошаговое выполнение некоторого участка программы. Для этого нужно установить курсор в нужное место программы и нажать клавиши Ctrl+F10.
Продолжаем отладку, нажав клавишу F10, после чего указатель переместится на оператор:
Summa += a[i];
Проверка значений переменных во время выполнения программы
В любой момент можно узнать текущее значение любой переменной. Чтобы узнать, например, значение переменной summa, в которой будет накапливаться сумма элементов массива а, установите и задержите над ней указатель мыши. Рядом с именем переменной на экране появляется подсказка со значением этой переменной:
Summa = – 858993446
(или с другим произвольным значением).
Переменная summa уже ненулевая, хотя еще не было никакого суммирования, т.к. допущена ошибка 1 – не обнулена переменная накопления summa до входа в цикл по организации суммирования.
Нажимаем комбинацию клавиш Shift+F5, чтобы выйти из отладчика, и исправляем найденную ошибку:
int i, Summa=0, n=5;
снимаем точку прерывания, компилируем – Build (F7), запускаем на выполнение – Execute Program (Ctrl+F5) и получаем новый результат:
Summa = 14
Все равно неправильно, необходимо продолжить отладку.
Вновь устанавливаем точку прерывания перед оператором for, запускаем программу в отладочном режиме – клавиша F5, нажимаем клавишу F10 – указатель следующей выполняемой команды переместился на оператор
Summa += а[i];
нажимаем клавишу F10 – указатель следующей выполняемой команды переместится на оператор
for(i = 1; i<n; i++)
Опять указатель мыши – над переменной summa, рядом с именем переменной на экране появится подсказка со значением этой переменной
Summa = 2
Сделана только 1-я итерация цикла, переменная Summa должна быть равна значению первого элемента массива 1, а у нас число 2, т.е. значение второго элемента массива.
Ошибка 2 находится в заголовке цикла for(i = 1; i < n; i++) – нумерация элементов массива в языке Си начинается с нуля, а у нас i = 1 – первоначально из цикла выдергивается второй по счету элемент, а не первый.
Выйдя из отладчика, снимаем точку прерывания, исправляем текст программы в операторе for:
for(i = 0; i < n; i++)
Вновь компилируем, запускаем на выполнение и получаем требуемый результат:
Summa = 15
Окна Auto и Watch 1
Помимо экранной подсказки, переменная sum со своим значением отображается в окне Auto, расположенном в левом нижнем углу экрана (см. рис. П 5.1). В этом окне приведены значения последних переменных, с которыми работал Visual C++.
Кроме этого, в окне Watch, которое находится в правом нижнем углу, можно задать имя любой переменной, за значениями которой вы хотите понаблюдать.
В заключение напомним, что после отладки проекта необходимо построить его финальную версию, т.к. в ЕХЕ-файле есть дополнительный отладочный код, включенный через директивы компилятора _DEBUG.В папке Debugего размер приблизительно равен 1 Мб. Для того чтобы получить нормальную версию, необходимо переключиться на проект типа Release.Это делается в меню Build:далее Set Active Configuration, дальше надо выбрать Releaseи запустить сборку: Rebuild all. Весь отладочный код пропускается, в каталоге проекта появится папка Release. Теперь размер ЕХЕ-файлаоколо 100 Кб.
Размер проекта еще зависит от того, как используется библиотека MFC.Как вы уже знаете – есть два варианта: Static LibraryиDinamic Library.Если использовать первый вариант, то код MFCбудет встроен в проект и размер возрастет. Во втором варианте программа будет пользоваться файлами *.DLL и размер будет меньше.