- •Цель работы
- •Создание программы
- •Запуск программы
- •Как работает отладчик
- •Настройка отладки
- •Запуск и прекращение отладки
- •Завершение отладки
- •Точки останова
- •Позиционные точки останова
- •Закладка Location
- •Закладка Data
- •Пошаговая отладка
- •Окна отладчика
- •Окно Variables
- •Окно Watch
- •Окно Call Stack
- •Диалоги отладчика
- •Пример отладки приложения
- •Задание к лабораторной работе
Настройка отладки
Для настройки отладки используется закладка Debug в окне Project->Settings. На этой закладке можно выбрать две категории: General и Additional DLLs. Первая категория используется для задания общих параметров отладки (рис. 11).
Рис. 11. Настройка отладки, категория General
Здесь вы можете задать следующие параметры.
Executable for debug session. Это тот самый файл, который будет запускаться под управлением отладчика. Если вы разрабатываете приложение, здесь прописывается полный путь к его exe-файлу. Из меню, раскрывающегося по щелчку на кнопке с чёрной стрелкой, вы можете выбрать командуBrowse(выбрать нужный exe-файл).
Working directory. Рабочий каталог для отлаживаемого приложения. По умолчанию используется каталог, в котором находится его exe-файл.
Program arguments. Аргументы, которые нужно передать приложению при запуске.
Remote executable path and file name. Путь к отлаживаемому приложению на удалённой машине, если отладка удаленная.
В категории Additional DLLs задаются модули, для которых необходимо принудительно загрузить отладочные символы. Категория Additional DLLs используется при отладке DLL программ.
Запуск и прекращение отладки
Чтобы вы могли контролировать выполнение программы и наблюдать её состояние, нужно запустить её под управлением отладчика Visual C++. Для этой цели используются команды из меню Build->Start Debug. Первые три из них (Go, Step Into и Run to Cursor) запускают тот процесс, который указан в настройках отладки (рис.12).
Рис.12. Меню отладки
Команда Attach to Processиз менюDebugоткрывает одноименный диалог, позволяющий подключить отладчик к любому уже запущенному процессу. Например, если написанная вами программа вдруг "зависла", можно тут же подключиться к ней и выяснить причину ошибки.
В Visual C++ начиная с версии 4.2 появилась возможность отладки "на лету" (Just-in-time debugging). Благодаря этой возможности отладчик можно подключить к программе именно в тот момент, когда она "упала" (например, из-за ошибки доступа). Вот как выглядит окно Application Error в Windows 2000 (рис. 13).
Рисунок 13. Окно Application Error
Если нажать кнопку Cancel, операционная система запустит отладчик, подключит его к сбойному процессу и предоставит вам возможность найти ошибку в момент её возникновения.
Завершение отладки
Сеанс отладки автоматически заканчивается, когда завершается отлаживаемая программа. Кроме этого, отладку можно прекратить в любой момент, вызвав команду Stop Debugging из меню Debug или нажав Shift+F5.
Точки останова
Точки останова (breakpoints) играют важную роль в отладке приложений. На самом деле, точка останова – это некоторое условие (например, достижение определённой команды в программе), при выполнении которого возбуждается исключение EXCEPTION_BREAKPOINT (0x80000003). Как мы уже знаем, исключение приводит к тому, что отлаживаемый процесс приостанавливается, а отладчик получает управление. В частности, он может считать текущие значения регистров процессора и ячеек памяти и выдать их на экран для анализа. После этого он может возобновить выполнение отлаживаемого процесса по команде программиста.
С помощью точек останова в отладчике Visual C++ реализовано множество полезных возможностей, например, пошаговая отладка (режим, в котором пользователь может выполнять по одной инструкции отлаживаемой программы за раз).
Visual C++ поддерживает множество разновидностей точек останова. Условием для прерывания программы может быть достижение некоторой команды, изменение глобальной переменной, приход заданного сообщения Windows и т. п. Приостановленную программу можно выполнять в пошаговом режиме, анализировать текущие значения переменных и даже вносить в программу изменения прямо "на лету", не прерывая сеанса отладки.
Самый простой способ приостановить программу – вызвать команду Break из меню Debug (ей соответствует команда Break Execution на панели инструментов). Иногда это бывает удобно. Если, к примеру, ваша программа вошла в бесконечный цикл, можно прервать её и посмотреть, почему это произошло. Однако в большинстве случаев такой способ недостаточно точен, и вместо него используются точки останова.