Алгоритмизации
Скачать 1.15 Mb.
|
ОкнаAutoиWatch1Помимо экранной подсказки, переменная sum со своим значением отображается в окне Auto, расположенном в левом нижнем углу экрана (см. рис. П 5.1). В этом окне приведены значения последних переменных, с которыми работал Visual C++. Кроме этого, в окне Watch, которое находится в правом нижнем углу, можно задать имя любой переменной, за значениями которой вы хотите понаблюдать. В заключение напомним, что после отладки проекта необходимо построить его финальную версию, т.к. в ЕХЕ-файле есть дополнительный отладочный код, включенный через директивы компилятора _DEBUG. В папке Debug его размер приблизительно равен 1 Мб. Для того чтобы получить нормальную версию, необходимо переключиться на проект типа Release. Это делается в меню Build: далее Set Active Configuration, дальше надо выбрать Release и запустить сборку: Rebuild all. Весь отладочный код пропускается, в каталоге проекта появится папка Release. Теперь размер ЕХЕ-файла около 100 Кб. Приложение5 Размер проекта еще зависит от того, как используется библиотека MFC. Как вы уже знаете – есть два варианта: StaticLibrary и Dinamic Library. Если использовать первый вариант, то код MFCбудет встроен в проект и размер возрастет. Во втором варианте программа будет пользоваться файлами *.DLL и размер будет меньше. ПрограммныесредстваотладкиПри создании приложения на базе MFC в него можно включить определенные инструкции, используемые только во время его отладки. Их использование замедляет выполнение программы. Цель использования: получение дополнительных сообщений, которые облегчают процесс отладки. При создании окончательной версии приложения эти операторы следует удалить. Режим компиляции приложения должен быть Debug (отладочный), т.к. инструкции – специальные функции и макросы библиотеки MFC, работающие только в отладочном режиме. Кроме того, в отладочной версии приложенияVisualC++ с помощью директивы #define определяется константа _DEBUG, используемая в директивах условной компиляции и в макросах отладки. МакросASSERT(BOOLexpression). Данный макрос используется для проверки некоторых логических условий, которые должны выполняться в данной точке программы. Его работа заключается в следующем: если логическое выражение BOOLexpression, передаваемое ему в качестве аргумента, имеет значение FALSE, выполнение приложения прерывается и на экран выводится окно сообщения, показанное на рис. П 5.2. В данном окне указывается имя файла и номер строки, в которой произошла ошибка. Рис. П 5.2 Нажатие кнопки «Повтор» позволяет перейти в текст программы для ее дальнейшей отладки, причем текущая точка останова устанавливается на Приложение5 строку соответствующего макроса ASSERT. В противном же случае ничего не происходит, и программа выполняется дальше. МакросTRACE(exp)служит для вывода диагностических сообщений. Синтаксис макросаTRACEаналогичен синтаксису функции printf. Здесь exp– переменное число параметрических аргументов, т.е. макрос позволяет выводить сообщения с любым числом параметрических аргументов. Под параметрическим аргументом понимается идентификатор переменной, значение которой должно быть преобразовано в текстовую строку в соответствии с указанным форматом. Помимо макроса TRACE существуют TRACE1, TRACE2 и TRACE3. Число в имени макроса указывает на количество параметрических аргументов в нем. Макросы TRACE0, TRACE1, TRACE2 и TRACE3 созданы исключительно с целью экономии места в сегменте данных. Все макросы TRACE посылают свои сообщения в поток afxDump. Для посылки сообщения могут быть использованы и обычные функции вывода, однако они будут работать и в окончательной версии, что бывает нежелательно. Пример вывода сообщения о возникновении ошибки в файле: TRACE2("\n Ошибка номер: %d в файле %s \n", nError, szFileName); Следующий пример иллюстрирует работу данного макроса: . . . int a = 5; char s[] = ”Minsk”; TRACE(“\n a = %d, s = %s \n”, a, s); . . . В поле среды OutPutполучим a=5,s=Minsk В окончательной версии приложения Release, в которой константа _DEBUG не определена, макросы ASSERT и TRACE не выполняют никаких действий. Это позволяет оставлять их в тексте программы. В случае же необходимости контроля некоторых логических условий и в рабочей области вместо ASSERT необходимо использовать макрос VERIFY(BOOLexpression), который работает точно так же, но в рабочей версии проекта. Приложение6 |