Шаг 101.
Отладчик Turbo Debugger (общие сведения)
На этом шаге мы рассмотрим основные возможности отладчика Turbo Debugger.
Отладчик фирмы Borland - это весьма мощное средство отладки программ. Этот отладчик разрабатывался еще
для DOS-программирования и ориентирован в основном на языки фирмы Borland. Существенно то,
что отладчик позволяет отлаживать программу как на уровне дизассемблированных команд микропроцессора, так и на
уровне исходного текста программы. В последнем случае требуется, чтобы при трансляции в исполняемый модуль
была помещена отладочная информация.
Рассмотрим, например, программу на рисунке 1.
Рис.1. Окна Turbo Debugger
Эта программа взята из 13 шага. При трансляции с помощью TASM32 добавим также ключ
/zi, а при компоновке (TLINK32.EXE) ключ -v. В этом случае в исполняемом модуле будет
сохранена информация, необходимая для символьной отладки. Тут важно иметь в виду, что для символьной отладки,
т.е. с использованием текста программы, необходим не только сам исполняемый модуль и отладочная информация в
нем, но и сам программный текст. Дело в том, что в исполняемом модуле хранится информация, позволяющая сопоставлять
машинные коды программ и текст программы. На рисунке 1 представлено окно отладчика с загруженной отладочной
информацией программы pr13_1.asm. Отладчик позволяет выполнять программу в пошаговом режиме, видя
одновременно текст программы и дизассемблированный текст, и, передвигаясь по нему, видеть результат каждого шага.
На рисунке 1 представлены три наиболее часто используемых окна отладчика:
- окно с текстом программы (окно исходного модуля),
- окно CPU, где отображается дизассемблированный текст, а
- также текущая информация о регистрах и флагах, и окно сообщений, которое очень важно при отладке оконных GUI-приложений.
Рассмотрим команды отладчика и возможности отладчика.
- Запуск отлаживаемого приложения выполняется после нажатия клавиши F9 или выбора команды Run из меню Run. Программа выполняется
полностью, если только не указана точка останова (breakpoint) на строку в окне с текстом программы или окне CPU. Точка останова устанавливается при помощи
клавиши F2. Открыв окно Watch (View | Watches), вы можете установить там слежение за переменными, которые вам интересны.
В этом случае точки останова окажутся очень полезными.
- Выполнение программы до строки, где находится курсор. Команда выполняется при помощи
клавиши F4 или посредством меню. Смысл данной команды заключается в том, что, заинтересовавшись каким-либо
местом программы, вы можете выполнить программу до данной строки и посмотреть результат выполнения.
Фактически это та же точка останова, но работает более оперативно. Кроме того, можно заставить выполняться
программу до заданного адреса (комбинация клавиш Alt+F9).
- Выполнение единичной команды. Команда выполняется по нажатию
клавиши F7. Если мы находимся в окне с текстом программы, то выполняется оператор соответствующего
языка. Если мы находимся в окне CPU, то выполняется инструкция микропроцессора.
- Выполнение команды с переходом через процедуру. Данная команда выполняется по нажатию
клавиши F8. Отличается от предыдущей команды заключается в том, что не происходит вход в процедуру,
но все инструкции в процедуре выполняются за один шаг.
- Выполнение процедуры. Если курсор находится на команде вызова процедуры, то можно
выполнить лишь одну эту процедуру нажатием комбинации клавиш Alt+F8.
- Выполнение с задержкой. Можно заставить отладчик выполнять программу с задержкой
после каждой команды (Animation) - команда Animate меню Run.
При выполнении любой из перечисленных команд также могут быть заданы опции командной строки - Run | Arguments.
Рассмотрим теперь окна, которые используются при отладке в данном отладчике. С некоторыми из них мы уже
познакомились, но все равно повторимся. Показать на экране то или иное окно можно посредством меню View. Мы опишем наиболее важные окна.
Текст программы можно увидеть на экране, обратившись к пункту меню View | Module. При этом программа
должна быть оттранслирована с опциями, обеспечивающими сохранение в исполняемом модуле отладочной информации.
К сожалению, речь идет только о продуктах фирмы Borland: C++, Delphi, Assembler. Отладочную информацию
других фирм Turbo Debugger не распознает. В дальнейшем мы рассмотрим пример отладки программы,
написанной на Borland C++.
Рис.2. Окно CPU
Если отладочную информацию в исполняемом модуле Turbo Debugger не распознает, вам при отладке придется
использовать окно CPU. Окно разделено на пять частей (рисунок 2):
- инструкции микропроцессора;
- сегмент данных;
- сегмент стека;
- состояние регистров;
- основные флаги.
Перечислим другие окна отладчика.
- Окно слежения за переменными. Окно открывается через команду View | Watches.
Щелкнув правой кнопкой мыши, мы можем по желанию добавить в окно переменные, значения которых мы хотим
наблюдать. При пошаговом выполнении программы либо при выполнении с точками останова можно на каждом этапе контролировать значения переменных.
- Окно стека (View | Stack). Показывает текущее состояние стека. Причем первая вызванная функция будет находиться на дне стека.
- Окно точек останова (View | Breakpoints). Здесь содержится информация обо всех установленных в программе точках останова. Здесь же можно добавить или установить точки останова.
- Окно регистрации (View | Log). В нем хранится информация о происходящих в отладчике событиях.
- Окно переменных (View | Watches). Это окно отображает переменные, доступные в данном контексте.
- Окно файлов (View | File...). В этом окне можно просмотреть двоичный файл и исправить его при необходимости.
- Окно отображения памяти (View | Dump). Дает возможность построчного просмотра данных в памяти.
- Окно сопроцессора (View | Numeric processor). Данное окно отображает текущее состояние сопроцессора.
- Окно истории выполнения (View | Execution History). Окно содержит историю выполнения программы.
- Окно иерархии (View | Hierarchy). Выводит на дисплей иерархическое дерево для всех объектов и всех типов классов, используемых в текущем модуле.
- Окно потоков (View | Theards). Данное окно содержит информацию обо всех потоках, запущенных в данный момент в отлаживаемом процессе.
- Окно сообщений (View | Window messages). С помощью данного окна можно отслеживать все сообщения, получаемые указанным окном. Можно выделить класс
отслеживаемых сообщений или задать единичные сообщения. Кроме отслеживания, можно задать и другую реакцию -
прервать выполнение, т. е. установить точку останова на определенное сообщение.
- Окно буфера обмена (View | Clipboard). С помощью данного окна можно следить за содержимым буфера обмена
при выполнении программы.
На следующем шаге мы рассмотрим отладку программы, написанной на языке высокого уровня.
Предыдущий шаг
Содержание
Следующий шаг