Доклад
на тему: Турбо отладчик (Turbo Debugger)
Отладка - это процесс нахождения и исправления ошибок в программе. Нет ничего необычного в том, что поначалу поиск и устранение ошибок занимают больше времени, чем написание программы.
Отладка не является точной наукой. Часто лучшее средство отладки находится в голове у программиста. Тем не менее, систематический метод отладки может дать некоторые преимущества.
Процесс отладки в общем случае можно разделить на четыре этапа:
1. Обнаружение ошибки.
2. Поиск ее местонахождения.
3. Определение причины ошибки.
4. Исправление ошибки.
Окна Турбо отладчика
Сегодня многие программные продукты работают с окнами, но Турбо отладчик делает это лучше. Турбо отладчик выводит в меню (локальных и глобальных) всю информацию и данные, работает с диалоговыми окнами (которые используются для задания или ввода информации) и другими окнами. В Турбо отладчике используется множество различных типов окон. Тип окна зависит от того, какого рода информацию он содержит. Открывать и закрывать все окна можно с помощью команд меню (или соответствующих им сокращений - оперативных клавиш). Большинство окон Турбо отладчика (15 типов окон) выводятся из меню View (Обзор). Другой класс окон, который называется окнами проверки (Inspector), выводится при выборе элемента меню Data│Inspect (Данные│Проверка) или команды локального меню Inspect.
Окна меню
View
Перечислим типы окон, которые вы можете открыть из меню View(Обзор).
┌────────────────────┐
Точки останова │ Breakpoints│
Стек │ Stack │
Регистрация │ Log │
Выражения просмотра │ Watches │
Переменные │ Variables │
Модуль │ Module... F3 │
Файл │ File... │
ЦП │ CPU│
Дамп │ Dump│
Регистры │ Registers│
Сопроцессор│ Numeric processor │
Протоколвыполнения│ Execution history │
Иерархия│ Hierarchy │
Сообщения Windows │ Windows messages │
"Карман" │ Clipboard│
Другое │ Another>│
└────────────────────┘
Когда вы открываете одно (или более) из этих окон, их можно перемещать, менять размер, закрывать и выполнять другие операции с помощью команд меню Window (Окно) и Ё (System - Система), о которых рассказывается в разделе "Работа с окнами".
Окно
Module
В окне Module(Модуль) на экран выводится код отлаживаемой программы. Вы можете перемещаться по этому модулю и просматривать данные и код, позиционирую курсор на именах переменных программы и давая соответствующие команды локальных меню.
В окне Module вы вероятно будете проводить больше времени, чем в окнах других типов, поэтому стоит потратить время и изучить различные команды локальных меню, доступных для этого типа окна.
Для того, чтобы открыть окно Module, можно также нажать клавишу F3.
Окно
Wathes
В окне Wathes (Просмотр), которое называют также окном наблюдения, выводятся переменные и их изменяющиеся значения. Нажав клавиши Ctrl-W при позиционировании курсора на имени переменной вокне Module (Модуль), вы можете добавить в окно Watches новую пе ременную.
Окно
Breakpoints
В окне Breakpoints (Точки останова) выводятся установленные вами точки останова. Точка останова определяет то место в вашей программе, где остановлено выполнение программы. При этом вы мо жете проверить состояние программы. В левой области окна перечисляются позиции в программе каждой точки останова (или показано, что это глобальная точка останова). В правой области данного окна показаны условия, при которых срабатывает текущая (подсвеченная) точка останова.
Используйте данное окно для изменения, удаления или добавления точек останова.
Окно Stack
В окне Stack (Стек) выводится текущее состояние стека. При этом внизу указаны самые первые вызовы функций (в программах на языке Си и C++ это функция main), а затем - все последующие вызовы в том порядке, как они выполнялись.
Вы можете проверить исходный код любой указанной в стеке функции, переведя на нее подсветку и нажав клавиши Ctrl-I.
Подсветив имя функции в стеке и нажав клавиши Ctrl-I, вы открываете окно Variables (Переменные), в котором выводятся переменные, глобальные относительно программы, переменные, локальные относительно функции, и аргументы вызова функции.
Окно Log
В окне Log (Регистрация) выводится содержимое протокола (списка) регистрации сообщений. Протокол содержит пролистываемый список сообщений и информацию, сгенерированную при вашей работе с Турбо отладчиком. Там сообщается, например, о том, почему остановилась ваша программа, о результатах срабатывания точек останова и содержимом окон, которые вы сохранили в протоколе регистрации.
Окно Log можно использовать для получения информации об использовании памяти и модулях прикладной программы Windows.
Данное окно позволяет вам вернуться назад и посмотреть, что привело к текущему состоянию.
Окно
Variables
В окне Variables (Переменные) выводятся переменные, доступные в данной точке вашей программы. В верхней области окна содержатся глобальные переменные. В нижней области показаны переменные, локальные по отношению к текущей функции или модулю (если они есть).
Данное окно полезно использовать, когда вы хотите найти функцию или переменную и знаете, с каких символов начинается ее имя (например, "abc"), но не помните точного имени. Вы можете войти в область глобальных идентификаторов данного окна и быстро найти то, что вам требуется.
Окно File
В окне File (Файл) выводится содержимое файла на диске. Вы можете просматривать содержимое файла в виде непосредственных шестнадцатиричных байт или в виде кода ASCII (текстовый вид). Вы можете выполнить поиск конкретного текста или последовательности байтов, а также непосредственно скорректировать любую часть файла на диске.
Это средство полезно использовать, если вы отлаживаете программу, использующую файлы на диске, и хотите изменить содержимое программы, изменив содержимое одного из ее файлов. Можно также исправить ошибку в содержимом файла, либо проверить файл, созданный программой, чтобы убедиться в правильности его содержимого.
Окно CPU
Окно CPU (ЦП) показывает текущее состояние центрального процессора (ЦП). Это окно содержит пять областей, в одной из которых показаны шестнадцатиричные байты данных, в другой выводится в непосредственном виде (шестнадцатиричные байты) содержимое стека, в третьей - содержимое регистров ЦП, в четвертой - машинные инструкции, а в пятой - содержимое флагов ЦП.
Если вы используете TDW, то в окне CPU выводится шестая область, в которой показываются селекторы памяти защищенного режима.
Окно CPU полезно использовать, когда вы хотите просмотреть точную последовательность инструкций, которую образует строка исходного кода программы, или структуру данных. Если вы знакомы с кодом Ассемблера, это может помочь вам выявить трудноуловимые ошибки. Однако для отладки большинства программ данное окно вам не понадобиться.
Иногда Турбо отладчик открывает окно CPU автоматически, если ваша программа останавливается на инструкции в середине строки исходного кода.
Окно CPU
Окно CPU (ЦП) показывает текущее состояние центрального процессора (ЦП). Это окно содержит пять областей, в одной из которых показаны шестнадцатиричные байты данных, в другой выводится в непосредственном виде (шестнадцатиричные байты) содержимое стека, в третьей - содержимое регистров ЦП, в четвертой - машинные инструкции, а в пятой - содержимое флагов ЦП.
Если вы используете TDW, то в окне CPU выводится шестая область, в которой показываются селекторы памяти защищенного режима.
Окно CPU полезно использовать, когда вы хотите просмотреть точную последовательность инструкций, которую образует строка исходного кода программы, или структуру данных. Если вы знакомы с кодом Ассемблера, это может помочь вам выявить трудноуловимые ошибки. Однако для отладки большинства программ данное окно вам не понадобиться.
Иногда Турбо отладчик открывает окно CPU автоматически, если ваша программа останавливается на инструкции в середине строки исходного кода.
Окно Registers
В окне Registers (Регистры) выводится содержимое регистров и флагов процессора (ЦП). Данное окно содержит две области, которые эквивалентны областям регистров и флагов окна CPU (ЦП). Это окно можно использовать, когда вам нужно просмотреть содержимое регистров, и вас не интересует прочая информация о состоянии центрального процессора. Значение любого регистра или флага можно изменить с помощью команды локального меню.
Окно
Numeric
Processor
В окне NumericProcessor (Арифметический сопроцессор) выводится текущее состояние арифметического сопроцессора. Это окно содержит три области. В одной из областей показывается содержимое регистров с плавающей точкой, в другом выводятся значения флага состояния, а в третьей - значения управляющих флагов.
Данное окно может помочь вам выявить ошибки в программе, работающей с числами с плавающей точкой. Вы должны иметь углубленное представление о внутренней работе математического сопроцессора. Только в этом случае данное окно принесет вам пользу.
Окно
Execution
History
В окне ExecutionHistory (Протокол выполнения) выводится код Ассемблера и и исходные строки вашей программы, вплоть до последней выполняемой строки. Верхняя область содержит выполненный код Ассемблера (вы можете пройти его повторно). В нижней области выводится следующее:
1. Выполняете вы трассировку или выполнение по шагам.
2. Строка исходного кода для следующей выполняемой инструкции.
3. Номер строки исходного кода.
Вы можете анализировать содержимое данного окна или использовать его для выполнения вашей программы до конкретной точки.
Окно Hierarchy
В окне Hierarchy (Иерархия) выводится дерево иерархии всех объектов или типов классов, используемых в текущем модуле. Окно содержит две области. Одна область используется для вывода списка типов объектов/классов. Другая - для вывода дерева иерархии объектов/классов. (Если вы выполняете отладку программ на языке С++ с множественным наследованием, то открывается также третье окно, где показывается порождающий класс для данного типа классов.)
Данное окно показывает вам взаимосвязь объектов или классов, используемых в текущем модуле. Оно также позволяет вам проверить любой объект или тип класса, а также являющиеся его компонентами поля данных или элементы и методы или функции-элементы (для этого используются команды локального меню).
Окно
сообщений
Windows (Windows Messages)
Это окно выводит список сообщений, передаваемых между окнами в вашей прикладной программе для Microsoft Windows. Это окно имеет три области:
- левая область показывает, для каких процедур или логических номеров вы отслеживаете сообщения;
- правая область показывает тип отслеживаемых сообщений.
- в нижней области отображаются сами сообщения.
Окно Clipboard
В этом окне выводятся элементы, которые забраны в буфер вырезанного изображения ("карман"), показаны их типы. Это позволяет проверить или удалить элемент и сохранить в "кармане" любое значение элемента.
Подготовка программ Турбо Ассемблера
При использовании Турбо Ассемблера для получения полной информации для отладки задайте параметр командной строки /zi.
При компоновке вашей программы с помощью компоновщика TLINK, используйте параметр /v для добавления в конец выполняемого файла .EXE информации для отладки.
Команды, доступные из основного меню
Основное меню (строку меню) можно вызвать с помощью клавиши F10. После этого вы можете перейти на одно из меню:
- переместив курсор на заголовок меню и нажав клавишу Enter;
- нажав первую буквы подсвеченного элемента (пункта) меню.
Кроме того, можно открыть меню непосредственно (не перемещаясь сначала к заголовку меню), нажав клавишу Alt в сочетании с первой буквой имени нужного меню.
Меню Ё (системное меню)
┌───────────────────────┬───────────────────────────────────────┐
│ │ │
│Repaint Desktop │Повторно выводит весь экран. │
│(Изобразить экран) │ │
│ │ │
├───────────────────────┼───────────────────────────────────────┤
│ │ │
│Restore Standard │Восстанавливает стандартную схему окон.│
│(Восстановить стандарт)│ │
│ │ │
├───────────────────────┼───────────────────────────────────────┤
│ │ │
│About (О Турбо отлад- │Выводит информацию о Турбо отладчике. │
│чике) │ │
│ │ │
└───────────────────────┴───────────────────────────────────────┘
Меню File (Файл)
┌─────────────────────┬─────────────────────────────────────────┐
│ │ │
│Open (Открытие) │ Открывает новую программу для отладки. │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Change Dir (Смена │ Выполняет переход на новый диск или в │
│каталога) │ новый каталог. │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Get Info (Получение │ Выводит на экран информацию о программе.│
│информации) │ │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Resident (Резидент- │ Приводит к тому, что Турбо отладчик за-│
│ный) │ вершит работу и останется резидентным в│
│ │ памяти. │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Symbol Load (Загруз- │ Загружает таблицу идентификаторов, │
│ка таблицы идентифи- │ независимую от файла .EXE. │
│каторов) │ │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Table Relocate (Пе- │ Задает значение базового сегмента табли-│
│ремещение таблицы) │ цы идентификаторов. │
│ │ │
├─────────────────────┼─────────────────────────────────────────┤
│ │ │
│Quit (Выход) │ Возвращает вас в DOS. │ │ │ │
└─────────────────────┴─────────────────────────────────────────┘
Меню Edit (Редактирование)
┌───────────────────────┬───────────────────────────────────────┐
│ │ │
│Copy (Копирование) │Копирует элемент в карман (Clipboard). │
│ │ │
├───────────────────────┼───────────────────────────────────────┤
│ │ │
│Paste (Вставка) │Вставляет элемент из кармана в окно или│
│ │в диалоговую подсказку. │
│ │ │
├───────────────────────┼───────────────────────────────────────┤
│ │ │
│Copy to Log (Копирова- │Копирует подсвеченный элемент или эле- │
│ние в окно Log) │мент в точке расположения курсора в │
│ │окно Log. │
│ │ │
└───────────────────────┴───────────────────────────────────────┘
Меню View (Обзор)
┌────────────────────┬──────────────────────────────────────────┐
│ │ │
│Breakpoints (Точки │Просмотр точек останова. │
│останова) │ │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Stack (Стек) │Просмотр стека вызовов функций. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Log (Регистрация) │Просмотр журнала регистрации событий и │
│ │данных. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Watches (Выражения │Просмотр наблюдаемых переменных. │
│просмотра) │ │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Variables (Перемен- │Просмотр глобальных и локальных перемен- │
│ные) │ных. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ &
│Module (Модуль) │Просмотр исходного модуля программы. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│File (Файл) │Просмотр содержимого файла на диске в │
│ │коде ASCII или в шестнадцатиричном виде. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│CPU (ЦП) │Просмотр инструкций, данных и стека │
│ │центрального процессора. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Dump (Дамп) │Просмотр дампа данных в непосредственном │
│ │виде. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Registers (Регистры)│Просмотр регистров и флагов процессора. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Numeric Processor │Просмотр сопроцессора или эмулятора. │
│(Арифметический │ │
│сопроцессор) │ │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Execution History │Выводит код Ассемблера, сохраненный для │
│(Протокол выполне- │обратной трассировки или повторного │
│ния) │выполнения нажатий клавиш. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Hierarchy (Иерархия)│Выводит список типов объектов или классов │
│ │и дерево иерархии. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Windows messages │Выводит список сообщений Windows для │
│(Cообщения Windows) │одного или более окон в вашей прикладной │
│ │программе. │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Clipboard (Карман) │Выводит на экран окно Clipboard, в кото- │
│ │ров вы можете видеть элементы, скопиро- │
│ │ванные в буфер вырезанного изображения │
│ │(карман). │
│ │ │
├────────────────────┼──────────────────────────────────────────┤
│ │ │
│Another (Другой...) │ │
│ │ │
│ Module │Создает другое окно Module (Модуль). │
│ Dump │Создает другое окно Dump (Дамп). │ │ File │Создает другое окно File (Файл). │
│ │ │
└────────────────────┴──────────────────────────────────────────┘
Меню Run (Выполнение)
┌─────────────────────────────┬─────────────────────────────────┐
│ │ │
│Run (Выполнение) │Запускает программу на выполнение│
│ │(без остановки). │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤ │ │ │
│Go To Cursor (Переход к │Выполняет программу до текущего │
│курсору) │места расположения курсора. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Trace Into (Трассировка │Выполняет одну строку исходного │
│вглубь) │кода или инструкцию. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Step Over (Шаг с пропуском) │Выполняет трассировку с пропуском│
│ │трассировки вызовов подпрограмм. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Execute To (Выполнение до...)│Выполняет программу до заданного │
│ │адреса. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Until Return (До возврата │Выполняет программу до возврата │
│управления) │функцией. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Animate (Автоматизировать) │Непрерывно выполняет программу по│
│ │шагам. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Back Trace (Обратная трас- │Изменяет порядок выполнения прог-│
│сировка) │раммы на обратный (по одной стро-│
│ │ке исходного кода или инструк-│
│ │ции). │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Instruction Trace (Трасси- │Выполняет одну инструкцию. │
│ровка инструкций) │ │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Arguments (Аргументы) │Выполняет одну инструкцию. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Program Reset (Сброс програм-│Выполняет перезагрузку текущей │
│мы) │программы. │
│ │ │
└─────────────────────────────┴─────────────────────────────────┘
Меню Breakpoints (Точки останова)
┌────────────────────────────┬──────────────────────────────────┐
│ │ │
│Toggle (Переключение) │ Переключает состояние точки │
│ │ останова в месте расположения │
│ │ курсора. │
│ │ │
├────────────────────────────┼──────────────────────────────────┤
│ │ │
│At (На...) │ Устанавливает по заданному адресу│
│ │ точку останова. │
│ │ │
├────────────────────────────┼──────────────────────────────────┤
│ │ │
│Changed Memory Global │ Устанавливает глобальную точку │
│(Изменение памяти (глоб.)) │ для области памяти. │
│ │ │
├────────────────────────────┼──────────────────────────────────┤
│ │ │
│Expression True Global │ Устанавливает глобальную точку │
│(Выражение истинно (глоб.)) │ для выражения. │
│ │ │
├────────────────────────────┼──────────────────────────────────┤
│ │ │
│Delete All (Удалить все) │ Удаляет все точки останова. │
│ │ │
└────────────────────────────┴──────────────────────────────────┘
Меню Data (Данные)
┌─────────────────────────────┬─────────────────────────────────┐
│ │ │
│Inspect (Проверка) │ Проверяет объект данных. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Evaluate/Modify (Вычисление/ │ Вычисляет выражение. │
│Модификация) │ │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Add Watch (Просмотр) │ Добавляет переменную в окно │
│ │ просмотра. │
│ │ │
├─────────────────────────────┼─────────────────────────────────┤
│ │ │
│Function Return (Возврат │ Проверяет значение, возвращаемое│
│функции) │ текущей функцией. │
│ │ │
└─────────────────────────────┴─────────────────────────────────┘
Параметры командной строки
─────────────────────────────────────────────────────────────────
Когда вы запускаете Турбо отладчик с помощью командной строки DOS, его можно одновременно настроить, используя для этого различные параметры. Общий формат командной строки имеет вид:
TD [параметры] [имя_программы [аргументы_программы] ]
Элементы, заключенные в квадратные скобки, являются необязательными. Если за параметром указывается минус (-), то данный параметр запрещается (если он разрешен в файле конфигурации).
┌───────────────────────────────────────────────────────────────┐
│ Параметр Функция │
├────────────┬──────────────────────────────────────────────────┤
│-cимя_файла │ Файл конфигурации, активизирующийся при загрузке.│
│ │ │
│-do │ Другой дисплей. │
│ │ │
│-dp │ Переключение страниц. │
│ │ │
│-ds │ Переключение на содержимое экрана пользователя. │
│ │ │
│-h │ Вывод справочного экрана. │
│ │ │
│-? │ Вывод справочного экрана. │
│ │ │
│-i │ Обработка переключения идентификатора процесса. │
│ │ │
│-k │ Разрешает запись нажатий клавиш. │
│ │ │
│-l │ Запуск кода инициализации Ассемблера. │
│ │ │
│-mN │ Размер динамически распределяемой области памяти.│
│ │ │
│-p │ Разрешает работать с "мышью". │
│ │ │
│-r │ Отладка на удаленных системах, COM1 (быстр.). │
│ │ │
│-rnлок;удал │ Разрешает сетевую отладку. │
│ │ │
│-rpN │ Порт COM для удаленной связи. │
│ │ │
│-rsN │ Скорость связи: 1 - медленная, 2 - средняя, 3 - │
│ │ быстрая. │
│ │ │
│-sdкаталог │ Каталог исходного файла. │
│ │ │
│-sc │ Отмена проверки на строчные/прописные буквы. │
│ │ │
│-smN │ Задает объем памяти для таблицы идентификаторов │
│ │ (в килобайтах). │
│ │ │
│-vn │ Запрещение режима 43/50 строк. │
│ │ │
│-vg │ Полное сохранение графики. │
│ │ │
│-vp │ Сохранение палитры EGA. │
│ │ │
│-yN │ Задает размер оверлейного буфера. │
│ │ │
│-yeN │ Устанавливает оверлейную область EMS в значение │
│ │ N (N страниц по 16 килобайт). │
└────────────┴──────────────────────────────────────────────────┘