Перечислим последовательность действий, необходимых для открытия существующего проекта.
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++.
Проще всего это можно сделать следующим образом: написать программу, содержащую несколько ошибок, и после этого при помощи отладчика показать, как найти и исправить эти ошибки.
Напомним, что синтаксические ошибки – это результат нарушения формальных правил написания программы на конкретном языке программирования.
Логические ошибки делят на ошибки алгоритма и семантические ошибки. Причина ошибки алгоритма – несоответствие построенного алгоритма ходу получения конечного результата сформулированной задачи. Причина семантической ошибки – неправильное понимание смысла (семантики) операторов выбранного алгоритмического языка.
Создадим консольное приложение под названием Test 1. В программе вычислим сумму первых пяти натуральных чисел (от 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.
Начинаем отладку программы.
Установка точки прерывания
Точка прерывания позволяет остановить выполнение программы перед любой выполняемой инструкцией для того, чтобы или продолжать дальнейшее выполнение программы, или продолжать программу в пошаговом режиме с целью отладки ее последующих участков, или продолжать выполнение программы в непрерывном режиме до конца программы или следующей точки прерывания.
Для того чтобы установить точку прерывания перед оператором, необходимо установить перед ним текстовый курсор и/или нажать клавишу F 9 или выбрать щелчком мыши Insert / Remove Breakpoint на панели инструментов Build MiniBar (крайняя правая кнопка). Точка прерывания обозначится в виде красного кружочка на левом поле окна редактирования перед выбранным оператором. Повторный щелчок на указанной кнопке снимает точку прерывания. В программе точек прерывания можно устанавливать столько, сколько нужно.
Выполнение программы до точки прерывания
Программа запускается в отладочном режиме с помощью команды подменю Build: Start Debug > Go (или нажатием клавиши F 5).
В результате код программы выполняется до той строки, на которой установлена точка прерывания. После чего программа останавливается и отображает в окне редактора ту часть кода, где находится точка прерывания. При этом появляется желтая стрелка на левом поле, указывающая на ту строку, которая будет выполнена на следующем шаге отладки.
Далее, установив точку прерывания перед оператором for, запустим программу в отладочном режиме, нажав клавишу F 5. Программа выполнится до данного оператора и остановится. При этом подменю Build заменилось на меню Debug. Вид экрана изображен на рис. П 5.1.
Рис. П 5.1
Пошаговое выполнение программы
Теперь можно выполнять один за другим операторы оставшейся части программы, нажимая клавишу F 10. При этом есть следующие дополнительные возможности.
1. Предположим, что код программы содержит функцию пользователя f 1() и что при пошаговом выполнении программы вы дошли до строки, содержащей вызов этой функции.
Возможны две ситуации:
– если необходимо просмотреть код вызываемой функции, то надо нажать клавишу F 11;
– если нужен только результат ее выполнения, то надо нажать клавишу F 10.
2. Далее, пусть мы проходим код функции f 1(), нажав клавишу F 11. Нажатие клавиш Shift + F 11 обеспечит досрочный выход из нее в точку вызова.
3. Существует возможность пропустить пошаговое выполнение некоторого участка программы. Для этого нужно установить курсор в нужное место программы и нажать клавиши Ctrl + F 10.
Продолжаем отладку, нажав клавишу F 10, после чего указатель переместится на оператор:
Summa += a[i];
Проверка значений переменных во время выполнения программы
В любой момент можно узнать текущее значение любой переменной. Чтобы узнать, например, значение переменной summa, в которой будет накапливаться сумма элементов массива а, установите и задержите над ней указатель мыши. Рядом с именем переменной на экране появляется подсказка со значением этой переменной:
Summa = – 858993446
(или с другим произвольным значением).
Переменная summa уже ненулевая, хотя еще не было никакого суммирования, т.к. допущена ошибка 1 – не обнулена переменная накопления summa до входа в цикл по организации суммирования.
Нажимаем комбинацию клавиш Shift + F 5, чтобы выйти из отладчика, и исправляем найденную ошибку:
int i, Summa=0, n=5;
снимаем точку прерывания, компилируем – Build (F 7), запускаем на выполнение – Execute Program (Ctrl + F 5) и получаем новый результат:
Summa = 14
Все равно неправильно, необходимо продолжить отладку.
Вновь устанавливаем точку прерывания перед оператором for, запускаем программу в отладочном режиме – клавиша F 5, нажимаем клавишу F 10 – указатель следующей выполняемой команды переместился на оператор
Summa += а [ i ];
нажимаем клавишу F 10 – указатель следующей выполняемой команды переместится на оператор
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 и размер будет меньше.