- •Как работает отладчик
- •Точки останова
- •Отладочные символы
- •Настройка отладки
- •Запуск и прекращение отладки
- •Подключение к уже запущенному процессу
- •Завершение отладки
- •Точки останова
- •Закладка Location
- •Закладка Data
- •Закладка Messages
- •Пошаговая отладка
- •Окна отладчика
- •Окно Watch
- •Диалоги отладчика
Настройка отладки
Для настройки отладки используется закладка Debug в окне Project->Settings. На этой закладке можно выбрать две категории: General и Additional DLLs. Первая категория используется для задания общих параметров отладки (рис. 1).
Рисунок
1. Настройка отладки, категория General
Здесь вы можете задать следующие параметры.
Executable for debug session. Это тот самый файл, который будет запускаться под управлением отладчика. Если вы разрабатываете приложение, здесь прописывается полный путь к его exe-файлу. При разработке DLL ответ не столь однозначен – здесь может стоять и Visual Basic или ActiveX Control Test Container (для ActiveX-элементов), и explorer.exe (при разработке расширения оболочки), и даже сама среда Visual C++ (если вы пишете add-in для неё). Из меню, раскрывающегося по щелчку на кнопке с чёрной стрелкой, вы можете выбрать команду Browse (выбрать нужный exe-файл), ActiveX Control Test Container (выбрать контейнер для тестирования ActiveX-элементов, поставляемый вместе с Visual C++) и Default Browser (выбрать заданный по умолчанию веб-броузер).
Working directory. Рабочий каталог для отлаживаемого приложения. По умолчанию используется каталог, в котором находится его exe-файл.
Program arguments. Аргументы, которые нужно передать приложению при запуске.
Remote executable path and file name. Путь к отлаживаемому приложению на удалённой машине. Эта опция используется для удалённой отладки, которой будет посвящён отдельный раздел.
В категории Additional DLLs задаются модули, для которых необходимо принудительно загрузить отладочные символы (рис. 2).
Рисунок
2. Настройка отладки, категория Additional
DLLs
Зачем это может понадобиться, спросите вы. Дело в том, что сразу после запуска отлаживаемого процесса отладчик пытается установить в нём заданные вами точки останова. Для этого ему требуются отладочные символы модулей, в которых эти точки устанавливаются Символы exe-файла приложения и подключаемых к нему при запуске DLL отладчик загружает сразу. Но символы DLL, которые будут загружены в программу позже (это касается явно загружаемых DLL, внутрипроцессных COM-серверов и т.п.), по умолчанию не загружаются. Это приведёт к сообщению “One or more breakpoints cannot be set and have been disabled”, когда отладчик попытается установить точки останова в этих DLL, а сами точки будут отключены. Для решения этой проблемы и используется категория Additional DLLs. К этому вопросу мы ещё вернёмся, когда будем обсуждать отладку DLL.
Запуск и прекращение отладки
Чтобы вы могли контролировать выполнение программы и наблюдать её состояние, нужно запустить её под управлением отладчика Visual C++. Для этой цели используются команды из меню Build->Start Debug. Первые три из них (Go, Step Into и Run to Cursor) запускают тот процесс, который указан в настройках отладки.
Подключение к уже запущенному процессу
Команда Attach to Process из меню Debug открывает одноименный диалог, позволяющий подключить отладчик к любому уже запущенному процессу (рис. 3). Например, если написанная вами программа вдруг "зависла", можно тут же подключиться к ней и выяснить причину ошибки. Вы можете даже подключиться к оболочке Windows (explorer.exe), чтобы изучить её работу с помощью отладчика. Правда, в этом случае вам придётся работать с ассемблером, так как Микрософт не поставляет исходные тексты своей оболочки.
Рисунок
3. Окно Attach To Process
Выбрать нужный процесс можно по заголовку его главного окна (колонка Title) или имени его exe-файла (колонка Process), а если этого недостаточно – по уникальному идентификатору процесса (колонка Process Id). Можно отсортировать процессы по любому из этих признаков, щёлкнув по заголовку соответствующего столбца. Обратите внимание на галочку Show System Processes. Если её установить, в список процессов будут включены системные процессы, такие, как сервисы Windows NT.
Just-in-time debugging
В Visual C++ начиная с версии 4.2 появилась возможность отладки "на лету" (Just-in-time debugging). Благодаря этой возможности отладчик можно подключить к программе именно в тот момент, когда она "упала" (например, из-за ошибки доступа). Вот как выглядит окно Application Error в Windows 2000 (рис. 4).
Рисунок
4. Окно Application Error
Если нажать кнопку Cancel, операционная система запустит отладчик, подключит его к сбойному процессу и предоставит вам возможность найти ошибку в момент её возникновения. Кроме этого, в Windows NT/2000 существует ещё один способ подключить отладчик к существующему процессу. Откройте Task Manager, найдите нужный процесс на закладке Processes, подсветите его в списке и выберите из контекстного меню команду Debug.
Just-in-time debugging работает следующим образом. Путь к отладчику запоминается операционной системой в параметре Debugger. В Windows NT/2000 этот параметр хранится в реестре под ключом HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug, а в Windows 9x – в файле win.ini в секции [AeDebug]. Одновременно на машине может быть только один отладчик, зарегистрированный для Just-in-time debugging. Чтобы прописать туда отладчик Visual C++, откройте окно Tools->Options, перейдите на закладку Debug и установите галочку Just-in-Time Debugging.
