ГЛАВА 2  ОТЛАДКА И TURBO DEBUGGER

     Простая истина  состоит  в  том,  что  человек несовершенен,
поэтому все мы допускаем ошибки.  Буть то простое дело, такое как
прогулка,  или  более  сложное,  такое  как программирование,  мы
обязательно на чем-то спотыкаемся.

     В программировании  ошибки  являются  совершенно  нормальным
явлением.  Редко  кому  удается с первого раза написать программу
без ошибок.  В этом нет ничего удивительного,  и этого не следует
стыдиться.   Однако   появление  ошибки  в  программе  заставляет
программиста  многократно  проверять  все  с  самого  начала.   В
программировании это называется отладкой.

Что такое отладка?
-----------------------------------------------------------------

     Отладка  -  это  процесс  нахождения  и  исправления  ошибок  в
программе. Нет  ничего  необычного  в  том,  что  поначалу  поиск  и
устранение ошибок  занимают больше времени, чем написание программы.
Отладка не  является точной  наукой; часто  лучшее средство  отладки
находится в голове у программиста.  Тем не менее, систематический
метод отладки может дать некоторые преимущества.

     Процесс отладки  в  общем  случае  можно разделить на четыре
этапа:

     1. Обнаружение ошибки

     2. Поиск ее местонахождения

     3. Определение причины ошибки

     4. Исправление ошибки

Обнаружение ошибки

     Первый этап  является  наиболее  очевидным.  Компьютер  либо
"зависает"  во  время  работы  программы,  либо  происходит сбой,
который проявляется в выдаче на экран  бессмысленной  информации.
Однако,  в  некоторых случаях ошибка не проявляется так очевидно.
Программа может работать хорошо до тех пор, пока не будет введено
некоторое число (например,  0 или отрицательное число),  или пока
не будет тщательно проверена  выдаваемая  ею  информация.  Только
после  такой проверки можно обнаружить,  что результат отличается
от ожидаемого в 2 раза,  или что в  середине  списка  имен  стоят
неправильные инициалы.

Нахождение ошибки

     Второй этап иногда является самым трудным.  Он заключается в
том,  чтобы найти место в программе, где находится ошибка. Просто
невозможно  держать  в  голове  всю  программу  сразу  (если  эта
программа не очень маленькая).  Лучший подход - это  "разделяй  и
властвуй",  то  есть разбивать программу на части и отлаживать их
отдельно друг от  друга.  Структурное  программирование  идеально
подходит для такой отладки.

Определение причины ошибки

     Третий этап,  выяснение причины ошибки,  возможно,  является
второй наиболее трудной стадией отладки.  После того,  как  будет
определено  местонахождение  ошибки,  обычно становится несколько
проще определить причину неправильной работы программы. Например,
если  вы  определили,  что  ошибка находится в процедуре с именем
PrintNames,  вам  достаточно  просмотреть   текст   только   этой
процедуры,  а  не  всей  программы.  Но даже в этом случае ошибка
может оказаться настолько "неуловимой",  что вам придется немного
поэкспериментировать, прежде чем вы сможете ее найти.

Исправление ошибки

     Последний этап    заключается    в    исправлении    ошибки.
Вооружившись   знанием   языка   программирования    и    знанием
местонахождения  ошибки,  вы устраняете ее.  После этого вы снова
запускаете программу, ждете появления следующей ошибки, и процесс
отладки начинается снова.

     При написании программы процесс,  состоящий их этих  четырех
этапов,   повторяется   многократно.   Например,   многочисленные
синтаксические ошибки  не  позволяют  откомпилировать  программу,
пока все они не будут исправлены. Компиляторы фирмы Borland имеют
встроенные  средства  проверки  синтаксиса,  которые  информируют
программиста  об  ошибках  такого  типа  и  позволяют  тут  же их
исправлять.

     Более подробное рассмотрение процесса отладки см. в главе 14.

     Однако есть  ошибки  гораздо  более  тонкие и коварные,  чем
синтаксические. Они не проявляются до тех пор, пока вы не введете
отрицательное  число,  либо  являются настолько неуловимыми,  что
загоняют вас в тупик.  Здесь-то вам и придет на  помощь  отладчик
Turbo Debugger.

Что может вам дать отладчик Turbo Debugger?
-----------------------------------------------------------------

     Автономный отладчик Turbo Debugger дает вам доступ к гораздо
более мощным средствам отладки,  чем те,  которые имеются в самом
компиляторе.

     Добавление такого мощного отладчика  к  компилятору  слишком
сильно увеличило бы его размер.

     Turbo Debugger   можно   использовать   для   отладки  любой
программы на языке  Си,  Паскаль  или  ассемблере,  написанной  с
помощью   компилятора   семейства   Turbo   фирмы   Borland   или
компилятора,  разработанного другой фирмой,  если  он  генерирует
информацию CodeView.

     Однако прежде чем отлаживать программу,  написанную на языке
фирмы Microsoft,  необходимо использовать  специальную  программу
преобразования, поставляемую с отладчиком Turbo Debugger.

     Кроме того,  можно  отлаживать любую программу,  созданную с
помощью компилятора какой-либо другой фирмы, однако в этом случае
отладка  может  производиться  только  на уровне языка ассемблера
(если  не  имеется  информация   CodeView).   Тогда   вы   должны
использовать  утилиту  TDCONVRT,  описание  которой  находится  в
документации  по  утилитам  Turbo  Debugger   на   дистрибутивных
дискетах.

     Отладчик Turbo   Debugger  может  помочь  решить  две  самые
трудные задачи  отладки:  определение  местонахождения  ошибки  и
выявление причины ошибки.  Turbo Debugger помогает преодолеть эти
сложности   благодаря   широким   возможностям   приостанавливать
выполнение  программы  и  проверять  ее  состояние в любой точке.
Можно даже задавать новые  значения  переменным  и  проверять  их
влияние  на  выполнение  программы.  Эта  возможность реализуется
такими функциями отладчика как трассировка, пошаговое выполнение,
просмотр, проверка, замена и слежение.

     Трассировка    Можно выполнять программу по одной строке.

     Обратная       Можно двигаться по выполненным кодам в
     трассировка    обратном направлении, выполняя действия,
                    противоположные выполненным в прямом
                    направлении.

     Пошаговое      Можно выполнять программу по одной строке,
     выполнение     выполняя вызовы процедур и функций за один
                    шаг отладки. Если вы уверены в том, что ваши
                    процедуры и функции не содержат ошибок, вы
                    можете использовать пошаговое выполнение,
                    которое ускорит отладку.

     Просмотр       Можно заставить Turbo Debugger открыть
                    специальное окно, в котором будет отображаться
                    различная полезная информация: переменные, их
                    значения, точки останова, содержимое стека,
                    файла регистрации, файла данных, исходного
                    файла, кода процессора, памяти, регистров,
                    сведения об арифметическом сопроцессоре, или
                    информация, выдаваемая программой.

     Проверка       Можно заставить Turbo Debugger еще глубже
                    проникнуть в программу и проверить содержимое
                    сложных структур данных, таких как массивы.

     Замена         Можно заменить текущее значение переменной
                    (глобально или локально) заданным значением.

     Слежение       Можно выбрать некоторые переменные программы и
                    следить за изменением их значений по ходу
                    выполнения программы.

     Эти мощные  средства  отладки  можно  использовать для того,
чтобы разбивать программу  на  отдельные  части  и  убеждаться  в
работоспособности одной части, прежде чем переходить к следующей.
Этот  способ  поможет  вам  продвигаться   по   своей   программе
независимо  от  ее  размера  и  сложности до тех пор,  пока вы не
найдете,  где скрыта ошибка.  Возможно,  вы  обнаружите  функцию,
которая   неправильно   присваивает   значение   переменной,  или
бесконечный  цикл,  в  котором   "застревает"   программа,   либо
неправильную  рекурсию,  приводящую  к нежелательным результатам.
Какая  бы  ни  была  ошибка,  Turbo  Debugger  может  существенно
ускорить ее нахождение в программме и выявить ее причины.

     Turbo Debugger 2.0 усилен возможностью отладки программ на
С++ и  объекто-ориентированном  Паскале.  Он  умеет  работать   с
объектами и  классами  и  корректно обрабатывает позднюю привязку
виртуальных правил или  компонентные  функции,  и  таким  образом
всегда правильно выполняет и показывает коды программы.

Чего не может Turbo Debugge

     При всех  мощных  возможностях,  встроенных в отладчик Turbo
Debugger,  может создаться впечатление,  что он может все.  Но  в
действительности  это  не  так.  Есть  по  меньшей мере три вещи,
которые Turbo Debugger не может делать за вас:

     - Turbo   Debugger   не   имеет    встроенного    редактора,
позволяющего  вносить  изменения  в  исходный текст программы.  У
большинства  программистов  есть  свой  редактор,   которым   они
предпочитают пользоваться.  Включение редактора в отладчик заняло
бы  слишком  много  памяти.  Однако  вы  легко  можете   передать
управление  своему  текстовому  редактору,  выбрав  команду  Edit
(редактирование) из локального меню окна  File  (более  подробную
информацию  см.  в описаниях команд).  Turbo Debugger вызовет тот
редактор, который вы задали с помощью программы настройки TDINST.
Если же вы работаете с Turbo С++, вы можете воспользоваться новым
средством Transfer,  позволяющим запуск Turbo Debugger  прямо  из
интегрированной среды Turbo.

     - Turbo   Debugger   не   может   за  вас  перекомпилировать
программу.  Для этого нужен отдельный компилятор программ,  такой
как Turbo Pascal или Turbo C.

     - Turbo  Debugger  не  может  за  вас  думать.  При  отладке
программы ваше главное достоинство состоит в том,  что вы  умеете
мыслить.  Turbo  Debugger  -  это мощный инструмент,  но если его
использовать бездумно,  он врят ли поможет вам сэкономить время и
усилия.


Как Turbo Debugger делает это

     Теперь послушайте   хорошую    новость:    Turbo    Debugger
предоставляет  вам  всю  свою мощь и изощренность,  оставаясь при
этом простым в использовании.

     Работа отладчика Turbo Debugger является искусным сочетанием
мощи   и  простоты,  которая  обусловлена  исключительно  удобным
пользовательским интерфейсом. В следующем разделе рассматриваются
преимущества    прогрессивного    пользовательского    интерфейса
отладчика Turbo Debugger.

Преимущества отладчика Turbo Debugger
-----------------------------------------------------------------

     Мы надеемся,  что  начав  использовать  Turbo  Debugger,  вы
быстро сделаетесь  его  поклонником.  Turbo  Debugger  специально
разрабатывался   настолько   простым  и  удобным,  насколько  это
возможно. Для достижения этой цели в него были заложены следующие
возможности:

     - Удобная и логичная система глобального меню.

     - Контекстно-зависимые  локальные меню,  которые практически
делают ненужным запоминание и ввод команд.

     - Диалоговые  блоки,   в   которых   вы   можете   выбирать,
устанавливать и переключать опции, а также вводить информацию.

     - Когда   вам  надо  ввести  что-либо  с  клавиатуры,  Turbo
Debugger предоставляет вам сохраненный список текстов, которые вы
уже  вводили в подобных ситуациях.  Вы можете выбрать любой текст
из этого списка, отредактировать его или ввести новый текст.

     - Полная поддержка макрокоманд,  позволяющая  ускорить  ввод
последовательности команд или нажатий клавиш.

     -  Удобное и полное управление окнами.

     - Поддержка устройства "мышь".

     -  Доступ к нескольким типам интерактивной подсказки.

     - Запись сеанса и выполнение в обратной последлвательности.

     В оставшейся   части  данной  главы  рассмотрены  эти  шесть
особенностей   пользовательского   интерфейса   отладчика   Turbo
Debugger.

Меню и блоки диалога

     Так же как и другие продукты фирмы Borland,  Turbo  Debugger
имеет  удобную  систему глобального меню,  вызываемую из линейки,
находящейся в верхней  части  экрана.  Пункты  этих  меню  всегда
доступны  пользователю,  независимо от того,  какое окно в данный
момент является "активным"  (то  есть,  в  каком  окне  находится
курсор).

     Каждому пункту линейки меню соответствует спускающееся меню.
Через спускающееся меню можно:

     - Выполнить команду.

     - Открыть разворачивающееся меню.  Такие меню появляются при
выборе пункта, за которым находится пиктограмма меню (>).

     - Открыть блок диалога.  Блоки диалога появляются при выборе
пункта меню,  за  которым  находится  пиктограмма  блока  диалога
(...).

Использование меню
------------------

     Есть три способа вызова меню из полоски главного меню:

     Вход

     - Нажмите клавишу F10,  переместите курсор на  нужный  пункт
меню и нажмите Enter.

     - Нажмите клавишу F10, а затем нажмите первую букву названия
пункта меню (пробел, F, V, R, B, D, W, O).

     - Нажмите клавишу Alt и первую букву команды  главного  меню
(F,  V,  R,  B,  D,  W,  O), чтобы выполнить данную команду меню.
Например,  нажатие клавиш Alt-F из любого места  системы  вызовет
меню File. Меню =(System) будет открыто при нажатии Alt-пробел.

     - Нажмите кнопку мыши при указателе, установленном в линейке
меню.

     Перемещение по  глобальному  меню  осуществляется  следующим
образом:

     Перемещение по меню

     - При   помощи   клавиш-стрелок  "вправо"  и  "влево"  можно
переходить от одного к  другому  спускающемуся  меню.  (Например,
если вы  находитесь  в  меню File,  то нажатие -> переведет вас в
меню View).

     - При  помощи  клавиш-стрелок   "вверх"   и   "вниз"   можно
переходить между командами конкретного меню.

     - Для   перехода   к   первому   и  последнему  пункту  меню
используйте соответственно клавиши Home и End.

     - Для перехода  к  младшему  (разворачивающемуся)  меню  или
блоку диалога  следует  высветить  нужную  команду  меню и нажать
Enter.

     - Для перехода  к  младшему  (разворачивающемуся)  меню  или
блоку диалога  можно  нажать  кнопку "мыши" при указателе "мыши",
установленном на соответствующей команде.

     Выход из меню или системы меню выолняется следующим образом.

     Выход

     - Для выхода из меню нижнего уровня и возврата к предыдущему
нажмите клавишу Esc.

     - Для  выхода  из  системы  меню  и возврата в активное окно
нажмите клавишу Esc.

     - Для  выхода  из  системы  меню  и возврата в активное окно
нажмите клавишу F10 на любом уровне меню (но не в блоке диалога).

     - Для  выхода  из  системы  меню  и возврата в активное окно
нажмите можно нажать кнопку мыши на активном окне.
     -

     Некоторые команды главного меню могут быть вызваны с помощью
специальных клавиш,  которые называется активными клавишами. Там,
где    они   используются,   соответствующие   активные   клавиши
указываются справа от команды меню.

     На рисунке  13  в  главе  13   показана   полная   структура
спускающихся   меню   системы  Turbo  Debugger.  В  таблице  13.1
перечислены все активные клавиши. Для получения полной информации
обо всех командах отладчика Turbo Debugger обратитесь к главе 13.

Блоки диалога
-------------
     Многие опции  команд  Turbo  Debugger позволяют доступ через
блоки диалога.  Блок диалога содержит один или более из следующих
элементов:

Состав блока диалога                                  Таблица 2.1
-----------------------------------------------------------------
Элемент            Как выглядит и что делает
-----------------------------------------------------------------
Кнопки             Кнопкой называется "затененный" текст (в моно-
                   хромных системах это выглядит как "инверсное"
                   изображение). При выборе кнопки Turbo Debugger
                   немедленно выполняет связанное с данной кноп-
                   кой действие. При выходе из блока диалога нажи-
                   мают кнопку OK, подтверждающую сделанный выбор,
                   либо кнопку Cancel, отменяющую выбор. В диало-
                   говых блоках бывают также кнопки Help, позво-
                   ляющую получить помощь по тому или иному
                   вопросу.

     Клавишей активации для кнопки OK служит Alt-K.

Блоки переключения Блок переключения представляет  программный
                   двухпозиционный переключатель включено/выклю-
                   чено. Если опция, связанная с данным блоком,
                   включена, то выводится символ X в квадратных
                   скобках: [X].

Селективные кнопки Селективные кнопки - это программные многопо-
                   зиционные переключатели, составляющие некото-
                   рый набор опций: одновременно можно выбрать
                   одну кнопку из данного набора. При этом рядом
                   с выбранной опцией появляется символ в круглых
                   скобках (*).

Блоки ввода        Блок ввода приглашает вас набрать строку сим-
                   волов (например,  имя файла). Блок ввода часто
                   имеет связанный с ним список истории ввода (см.
                   раздел).

Блок списка        Блок списка содержит список элементов, из которых
                   вы можете   сделать   выбор  (например,  список
                   файлов, которые вы можете открыть).
-----------------------------------------------------------------

     Навигация по диалоговым блокам выполняется при помощи клавиш
Tab и Shift-Tab.  По набору селективных кнопок можно перемещаться
при помощи клавиш-стрелок, изменяющих текущую выбранную кнопку.

     Если у  вас  есть мышь,  то навигация по блокам диалога даже
упрощается. Нужно просто нажать кнопку на  нужном  элементе.  Для
того, чтобы  закрыть  блок  диалога,  нажмите  кнопку над верхним
левым углом.

     Элементы блока диалога можно выбирать и  при  помощи  клавиш
активации, т.е. соответствующих высвеченных букв каждой команды.



Контекстно-зависимая работа

     Кроме удобной   системы  спускающихся  меню  фирмы  Borland,
преимущества  отладчика  Turbo  Debugger  включают  одно   мощное
свойство,  которое  значительно  облегчает  работу с отладчиком и
ускоряет процесс его освоения,  уменьшая  количество  необходимых
для работы меню.

     Чтобы понять это свойство отладчика, прежде всего необходимо
уяснить,  что  Turbo   Debugger   является   контекстно-зависимой
программой.  Он точно отслеживает,  какое окно вы открыли,  какой
текст выбрали и в какой части окна находится курсор (то  есть,  в
какой "панели").    Иными  словами,  когда вы выбираете некоторую
команду,  Turbo  Debugger  всегда  точно  знает,  что  именно  вы
просматриваете  и  где  находится  курсор.  И  при ответе на вашу
команду он использует эту информацию.  Давайте рассмотрим пример,
который проиллюстрирует это важное свойство отладчика.

     Предположим, в  вашей  паскаль-программе  имеется  следующая
строка:

     MyCounter[TheGrade] := MyCounter[TheGrade] + 1;

     При работе с отладчиком Turbo Debugger вы быстро обнаружите,
что  получать  информацию о структурах данных очень просто.  Все,
что для этого надо сделать,  это нажать клавишу  Ctrl-I,  клавишу
активации  окна Inspect,  для проверки.  Если курсор находится на
слове MyCounter,  Turbo Debugger выдаст информацию  о  содержимом
всего массива. Однако, если вы выберете полное имя массива вместе
с индексом  (то  есть  выделите  его)  и  затем  нажмете  Ctrl-I,
отладчик  поймет,  что вы хотите проверить один элемент массива и
покажет вам только этот элемент.

     Таким путем  можно  "углубляться"  в  структуры   данных   и
получать  все более подробную информацию о программе.  По нажатию
клавиш  Ctrl-I  во  время  проверки   массива   отладчик   выдаст
информацию о его конкретном элементе.

     Контекстная зависимость  такого  рода  делает Turbo Debugger
исключительно простым  в  использовании.  Для  работы  с  ним  не
требуется запоминать и вводить с клавиатуры длинные строки команд
меню  или  параметры  командной  строки.  Достаточно  переместить
курсор на тот элемент,  который необходимо проверить (или выбрать
его с помощью  клавиши  Ins),  а  затем  вызвать  нужную  команду
(например,  нажатием  клавиш  Ctrl-I - проверку).  Turbo Debugger
всегда сделает все возможное,  чтобы предоставить  информацию  по
данному элементу.

     Такая контекстная     зависимость,     облегчающая     жизнь
пользователю,  усложняет описание комад отладчика.  Это связано с
тем, что, например, результат выполнения команды Ctrl-I не всегда
одинаков и зависит от того,  где находится курсор и какой  выбран
текст.

Локальные меню
--------------

     Другой аспект  зависимости  от  контекта   отладчика   Turbo
Debugger  заключается в использовании локальных меню, специфичных
для конкретных окон или панелей.

     Локальные меню  в  отладчике  Turbo  Debugger  привязаны   к
конкретному  окну или панели,  в которой вы находитесь.  Важно не
путать локальные меню  с  глобальными).  Ниже  показан  составной
экран,  на котором нахлдятся оба типа меню (при реальной работе в
Turbo Debugger видеть их одновременно нельзя).


     Рис.2.1  Глобальные и локальные меню



     Сравните приведенные ниже особенности меню этих  двух типов.

     Глобальные меню:

     - Доступ к спускающимся меню осуществляется нажатием клавиши
F10 и использованием клавиш управления курсором или вводом первой
буквы названия меню.

     - Спускающиеся меню доступны в любой момент  и  их  названия
отображаются в линейке главного меню в верхней части экрана.

     -  Их содержимое никогда не изменяется.

     - Некоторым   командам   этих  меню  соответствуют  активные
клавиши, которые доступны из любого места среды Turbo Debugger.

     Локальные меню:

     - Локальные меню вызывается нажатием клавиш Alt-F10 или Ctrl
-F10.

     - Положение  на  экране и содержание данного меню зависит от
того, какой выбран текст и где находится курсор.

     - Содержимое локальных меню может изменяться. (Тем не менее,
важно понять, что многие локальные команды имеются практически во
всех всех меню,  то есть  существует  некоторое  предопределенное
ядро  команд,  которое  остается  неизменным  во всех меню.) Даже
результаты  выполнения  хорошо  известных   команд   могут   быть
различными в зависимости от контекста.

     - Каждая  команда  раскрывающегося  меню  имеет  сокращенную
форму в виде нажатия активных клавиш,  одной из которых  является
клавиша Ctrl, а другой - первая буква команды.

     Вследствие этого,  одно нажатие активной клавиши,  например,
Ctrl-S,  может означать одно в данном контексте и совершенно иное
в другом контексте. (Как было указано выше, тем не менее, имеется
некоторая совокупность команд,  которая  остается  неизменной  во
всех раскрывающихся меню и составляет их ядро.  Например, команды
Goto и Search всегда делают одно и то же,  даже когда  вызываются
из разных подокон.)

     С точки  зрения  пользователя,   локальные   меню   являются
исключительно удобным средством.  Все возможные команды,  которые
связаны с работой в данный момент, находятся у него перед глазами
в явном виде. Это предохраняет его от попыток выбора неподходящих
команд и позволяет сделать меню небольшими и понятными.

"Уроки истории"

     Система меню и контекстная  зависимость  -  это  только  два
аспекта   удобного  пользовательского  интерфейса  системы  Turbo
Debugger.  Еще одним его важным свойством является  "исторический
список".

     Придерживаясь той  концепции,  что  пользователь  не  должен
вводить  больше,  чем  минимально  необходимо,   Turbo   Debugger
запоминает  любой  текст,  который вводится пользователем в блоках
запроса,  и отображает этот текст при следующем вызове этого блока
на экран.

     Например, если  в  тексте  программы  надо  найти  функцию с
именем ReturnOnInvestment,  обычно для этого требуется  ввести  с
клавиатуры все это слово или его часть. Теперь предположим, что в
тексте   программы   необходимо   найти   переменную   с   именем
MyPercentage.  Когда  в этот раз на экране появится блок запроса,
вы увидите,  что в нем сохранился текст  ReturnOnInvestment.  При
следующем  поиске  текста  в блоке запроса будут отображаться обе
введенные ранее строки.  Этот список будет пополняться при каждом
использовании команды Search.

     Блок запроса  при выполнении  поиска может  выглядеть следующим
образом:

     Рис. 2.2 "Исторический список" в блоке запроса (стр.22)

     Этот "исторический список"  можно  использовать  для  выбора
любого  введенного  ранее  текста  с  помощью  клавиш  управления
курсором и нажать клавишу Enter,  чтобы начать его поиск. Если вы
используете какой-либо элемент списка в неизменном виде, то после
выполнения поиска он перемещается в начало списка.

     Кроме того, можно отредактировать текст (используйте клавиши
управления  курсором  для  позиционирования курсора на выделенный
текст и отредактируйте его обычным  способом,  используя  клавиши
Del и Backspace).  Например,  можно выбрать текст myPercentage и,
отредактировав его,  получить текст hisPercentage,  вместо  того,
чтобы вводить с клавиатуры весь текст целиком.  Если вы начинаете
вводить новый элемент,  когда некоторый элемент  списка  является
выделенным, вы затираете им выделенный элемент.

     Первым элементом  в списке для поиска всегда является слово,
на котором в данный момент установлен курсор в окне Module.

     Отладчик отображает список из десяти элементов,  если ему не
было  задано  другое  количество  (размер списка можно изменить с
помощью программы TDINST).

     Turbo Debugger хранит отдельные  "исторические  списки"  для
большинства полей запроса.  То есть тексты,  которые вводятся для
выполнения поиска, не смешиваются с текстами, введенными, скажем,
для перехода по меткам или по номерам строк.

Автоматическое дополнение имени
-------------------------------

     Когда вам дается приглашение на ввод текста в  блоке  ввода,
вы можете  ввести  толькочасть символического имени программы,  а
затем нажать Ctrl-N.

     Предупреждение! Когда   в   верхнем   правом   углу   экрана
появляется слово READY...  с тремя точками в конце, это означает,
что происходит сортировка таблицы символических имен.  Ctrl-N  не
будет раблтать  до  тех  пор,  пока  не  исчезнут три точки,  что
означает готовность таблицы символических  имен  к  использованию
для автоматического дополнения имен.

     - Если   введено   достаточно   символов   для   однозначной
идентификации имени, Turbo Debugger дополняет имя.

     - Если введенная вами часть имени не принадлежит  ни  одному
из известных символических имен, ничего не происходит.

     - Если   введенное   вами  соответствует  более  чем  одному
символическому имени, то выводится список таких имен, из которого
вы можете выбрать желаемое.

Инкрементный поиск соответствия имен

     Turbo Debugger  позволяет  выполнять   поиск   элементов   в
диалоговом блоке  со  списком  файлов  и директорий инкрементено.
Начните ввод имени файла или директории; если такой файл в списке
имеется, то  световая  линейка  будет приближаться к его имени по
мере того,   ка   вы    будете    вводить    новые,    однозначно
идентифицирующие его  символы.  Затем вам остается выбрать кнопку
OK.


Создание макросов

     Макрос -  это  ни  что иное,  как активная клавиша,  которую
определяете вы сами.

     Любой последовательности команд отладчика Turbo  Debugger  и
нажатий  клавиш  можно  поставить  в  соответствие  одну клавишу,
которая будет "воспроизводить" заданную последовательность.

     Для того чтобы создать макрос,  надо выбрать Options|Macros.
После   этого  можно  выбрать  одну  из  четырех  команд:  Create
(создать),  Remove (удалить), Delete All (уничножить все макросы)
и  Stop  Recording  (закончить запись).  Выберите команду Create.
Turbo Debugger запросит клавишу, которой будет назначен следующий
макрос. Нажмите редко используемую или легко запоминаемую клавишу
(например,  Shift-F1 для повторного  запуска  программы).  Теперь
выполните  все  действия  и команды,  которые вы хотите назначить
этой клавише.

     --------------------
     Create          Alt=
     Stop Recording  Alt-
     Remove
     Delete All
     --------------------

Для  того чтобы закончить запись:

     - Выберите Options|Macros|Stop recording

     - Нажмите  только  что  определенную макро клавишу (в данном
примере Shift-F1).

     - Нажмите Alt- (Держа нажатой клавишу  Alt,  нажмите  дефис,
или знак минус.


     Каждый раз,   когда   вы   будете    выполнять    какую-либо
последовательность  действий,  задавайте себе вопрос:  "Нельзя ли
для этой последовательности использовать макрос?".


Использование окон

     В большинстве  современных программ используются окна,  но в
системе Turbo Debugger они сделаны еще лучше.  Всю  информацию  и
данные Turbo Debugger отображает в меню (локальных и глобальных),
блоках запроса (в которые информацию  вводит  пользователь)  и  в
окнах.  Используются  различные  виды окон в зависимости от того,
какого типа информация в них отображается. Все окна открываются и
закрываются   с   помощью   команд  меню  (или  активных  клавиш,
соответствующих этим  командам).  Большая  часть  окон  отладчика
Turbo  Debugger вызывается из спускающегося меню View (просмотр).
Из этого меню вызывается 14 видов окон.  Имеется и  окно  другого
типа,  которое  называется окном проверки (Inspect) и открывается
выбором пункта Data|Inspect или  пункта  Inspect  из  большинства
локальных меню.

Окна, вызываемые из меню View
-----------------------------------------------------------------

     ---------------------
     Breakpoints
     Stack
     Log
     Watches
     Variables
     Module...          F3
     File...
     CPU
     Dump
     Registers
     Numeric processor
     Execution history
     Hierarchy
     Another
     ---------------------

     Ниже приведено   описание   13  видов  окон,  которые  можно
открыть,  вызвав соответствующие команды из меню View (просмотр).

     Если вы  открыли  одно  такое  окно  или  более,  вы  можете
перемещать их,  изменять  размеры,  закрывать  и  управлять этими
окнами самыми различными способами при помощи команд  меню Window
и =(System), рассматриваемых в разделе "работа с окнами".


Окно модуля (Module)
--------------------

     Отображает текст   программы,  которую  вы  отлажаваете.  Вы
можете перемещаться по всему модулю и  проверять  данные  и  код,
"указывая"  имена  переменных курсором и выполняя соответствующие
команды локальных меню.

     По всей  вероятности,  на  работу  в  этом  окне  вы  будете
затрачивать  больше  всего  времени,  поэтому  постарайтесь найти
время,  чтобы изучить все команды локальных меню для этого  окна.
Для  того  чтобы  открыть  окно  модуля  можно также использовать
клавишe F3.

     Подробное описание окна модуля  и  его  команд  приведено  в
главе 8.


Окно слежения (Watches)
-----------------------

     Отображает переменные  и их изменяющиеся значения.  Для того
чтобы занести переменную в  это  окно,  надо  установить  на  нее
курсор и нажать клавиши Ctrl-W.

     Подробное описание окна слежения и его  команд  приведено  в
главе 6.

Окно точек останова (Breakpoints)
---------------------------------

     Отображает точки  останова,  заданные  пользователем.  Точка
останова задает место в программе,  где что-то должно  произойти,
то  есть в этой точке выполнение программы приостанавливается,  и
вы можете проверить ее состояние.  (Turbo  Debugger  поддерживает
все возможности,  которые обычно закладываются в точки останова.)
Данное  окно  можно  использовать  для   переноса,   удаления   и
добавления точек останова.

     Подробное описание  этого  окна  и работы с точками останова
приведено в главе 7.


Окно стека (Stack)
------------------

     Отображает текущее состояние стека,  причем первая вызванная
функция  будет  находиться  на  дне  стека  (для  Си-программ это
функция  main),  а  все  последующие  вызванные   функции   будут
располагаться  в  направлении вершины стека в последлвательночсти
их вызова.

     Более подробную информацию о любой процедуре или  функции  в
стеке можно получить,  установив курсор на ее имя и нажав клавиши
Ctrl-I, которые вызовут команду Inspect (проверить).

     Высветив имя функции в стеке и нажав Ctrl-L,  вы  тем  самым
откроете окно Variables, в котором показаны глоьальные переменные
программы, локальные переменные функции и аргументы,  с  которыми
вызвана функция.

     Более подробная  информация  об  этом окне приведена в главе
5.

Окно регистрации (Log)
----------------------

     Отображает содержимое журнала регистрации  сообщений. Журнал
содержит    прокручиваемый   список   сообщений   и   информацию,
сформированную при работе с отладчиком  Turbo  Debugger.  В  этом
журнале хранится такая информация, как причина прекращения работы
программы,  результаты выполнения программы до точек  останова  и
значения структур, которые были сохранены в журнале.

     Это окно  позволяет  пользователю  просматривать предысторию
процесса  и  определять,  что  привело   к   текущему   состоянию
программы.

     Более подробная  информация  об окне регистрации приведена в
главе 7.


Окно переменных (Variables)
---------------------------

     Отображает все  переменные,   доступные   в   данной   точке
программы.  В левом подокне содержатся глобальные переменные, а в
правом - локальные переменные,  если они имеются.

     Это окно бывает полезно  в  тех  случаях,  когда  необходимо
найти некоторую функцию или переменную, про которую известно, что
она начинается,  скажем,  с символов  "abc",  но  точное  ее  имя
забыто.  В  этом  случае  можно  просмотреть  содержимое  подокна
глобальных переменных  и  быстро  найти  то,  что  нужно.

     Более подробно окно переменных описано в главе 5.


Окно файла (File)
-----------------

     Отображает содержимое    дискового    файла.    Файл   можно
просматривать как в шестнадцатиричном,  так и в текстовом (ASCII)
формате.   Можно   выполнять   поиск   какого-либо   текста   или
последовательности   байтов,  а  также   непосредственно  ставить
"заплату"  в  любое  место  дискового  файла.

     Это бывает   удобно  при  отладке  программы,  работающей  с
дисковыми файлами, поведение которой желательно изменить, заменив
содержимое  одного  из ее файлов.  Можно также исправить ошибку в
файле  или  проверить  файл,  сформированный  программой,   чтобы
убедиться  в  правильности его содержимого.

     Более подробно окно файла описано в главе 8.


Окно процессора (CPU)
---------------------

     Отображает текущее  состояние  центрального процессора.  Это
окно   разбито   на   пять   подокон:   в   одном    отображаются
дизассемблированные     машинные     команды,    в    другом    -
шестнадцатиричные  байты  данных,  в  третьем  -  исходный   стек
шестнадцатиричных   слов,  в  четвертом  -  содержимое  регистров
процессора и в пятом - состояние флагов процессора.

     Окно процессора полезно использовать  в  том  случае,  когда
желательно  проверить  точную последовательность машинных команд,
которая    составляет    строку     исходного     текста,     или
последовательность  байтов,  которая составляет структуру данных.
Если вы знаете язык ассемблера, это окно может помочь вам выявить
некторые виды тонких ошибок. Для отладки подавляющего большинства
программ это окно не требуется.

     Turbo Debugger  иногда  открывает  окно  CPU  автоматически,
когда программа   останавливается   на   команде,  находящейся  в
середине строки исходного кода.

     В главе 11 описывается окно процессора и отладка  на  уровне
языка ассемблера.


Окно дампа (Dump)
-----------------

     Отображает построчное  содержимое  области   памяти.   Можно
просматривать  данные в виде символов,  шестнадцатиричных байтов,
слов,  двойных слов и в любом формате с  плавающей  точкой.  (Это
окно аналогично подокну данных (Data) окна процессора.) Его можно
использовать  в  тех  случаях,   когда   желательно   просмотреть
некоторые  исходные  данные,  не  заботясь об остальном состоянии
процессора.  В локальном меню имеются команды,  которые позволяют
модифицировать отображаемые данные,  менять формат их отображения
на экране и манипулировать блоками данных.

     Для получения  более  подробной  информации  о  данном  окне
обратитесь  к  главе  11,  в  которой  рассматривается отладка на
уровне ассемблера.


Окно регистров (Registers)
--------------------------
     Отображает состояние регистров и флагов процессора. Это окно
имеет два подокна, которые аналогичны подокнам регистров и флагов
окна  процессора.  Используйте  это  окно  в  тех случаях,  когда
необходимо проверить состояние регистров, не заботясь о состоянии
остальной  части  процессора.  С  помощью  команд локального меню
можно изменять значения любых регистров и флагов процессора.

     Для получения  более  подробной  информации  о  данном  окне
обратитесь  к  главе  11,  в  которой  рассматривается отладка на
уровне ассемблера.


Окно числового процессора (Numeric Processor)
---------------------------------------------

     Отображает текущее   состояние   процессора  арифметического
сопроцессора.  Это  окно  имеет  три  подокна:  в  одном  из  них
отображается  содержимое  регистров данных с плавающей точкой,  в
другом - значения флагов состояния и в третьем -  значения флагов
управления.

     Это окно  поможет  вам  диагностировать ошибки в программах,
обрабатывающих числа с плавающей точкой.  Однако для  того  чтобы
извлечь   реальную   пользу   их  этого  окна,  необходимо  иметь
достаточно  хорошее  представление   о   работе   арифметического
сопроцессора.

     Более подробная  информация  об  окне  числового  процессора
приведена в главе 12.


Окно истории выполнения (Execution History)
-------------------------------------------

     Данное окно выводит на дисплей ассемблерный код  и  исходные
строки вашей программы,  до последней выполненной строки. Верхнее
подокно содержит  выполненный  ассемблерный  код,  что  позволяет
двигаться по  программе в рбратном направлении;  в нижнем подокне
выводится информация о том,

1. происходит ли трассировка или пошаговое выполнение программы;

2. строка исходного кода для выполняемой команды;

3. номер строки исходного кода.

     Вы можете использовать это окно для изучения  кода  или  для
возврата программы в конкретную точку.

     Более подробную  информацию об окне Execution History см.  в
главе 5.


Окно иерархии (Hierarchy)
-------------------------

     Выводит на дисплей иерархическе дерево для всех объектов или
типах класса,  используемых в текущем модуле.  Это окно имеет два
подокна: одно для вывода списка объектов/типов класса, а другое -
для вывода  дерева  объектов/типов  класса.  (Если вы отлаживаете
программу С++ с множественным  наследованием,  то  открывается  и
третье подокно,  в  котором показаны "родители" высвеченного типа
класса).

     Данное окно  показывает  взаимосвязи  между  объектами   или
типами класса,   используемыми   в   текущем  модуле.  Оно  также
позволяет рассматривать любой объект  или  тип  класса,  а  также
соответствующие им  компонентные поля или компонентные данные,  а
также их правила или компонентные функции,  с использованием  для
этого локальных меню, принадлежащих меню Hierarchy.

     Более подробную информацию об окне Hierarchy см. в главе 10.


Окна-дубликаты
--------------

     ---------------
     Module...
     Dump
     File...
     ---------------

     Вы имеете  возможность  открывать также дубликаты трех типов
окон - Dump,  File и Module,  выбирая для этого View/Another. Это
позволяет   следить   одновеременно   за  несколькими  различными
фрагментами    ассемблерного    кода,     различными     файлами,
обрабатываемыми  или формируемыми программой,  или за несколькими
разными модулями программы.

     Не удивляйтесь,  если Turbo Debugger откроет  одно  из  этих
окон самостоятельно. Он делает это в некоторых случаях в ответ на
команду пользователя.


Окно экрана пользователя (User Screen)
--------------------------------------

     Отображает информацию,  выдаваемую   на   экран   программой
пользователя.  Информация отображается точно в таком же виде, как
если бы вы запустили программу непосредственно из ДОС,  а  не  из
отладчика.

     Это окно можно использовать для проверки того, что программа
находится в той точке,  в которой предполагается,  или того,  что
программа выдает на экран правильную информацию. Для вызова этого
окна выберите Window|User Screen.  Для  того  чтобы  вернуться  к
экрану  отладчика  после  просмотра экрана пользователя,  нажмите
любую клавишу.

     Активной клавишей переключения между  интегрированной средой
и экраном пользователя служит Alt-F5.



Окно проверки
-------------

     В окне проверки (Inspector)  отображается  текущее  значение
выбранной  переменной.  Окна этого типа никогда не разбиваются на
подокна.  Обычно это окно закрывается по нажатию клавиши Esc  или
кнопки  мыши.  Если  вы  последовательно  открыли  несколько окон
проверки,  что часто происходит  при  проверке  сложных  структур
данных,  вы  можете  закрыть все их сразу нажатием клавиши Alt-F3
или с помощью команды Window/Close (Окно/Закрыть).

     Окно проверки можно использовать для просмотра  как  массива
элементов, так и значений переменной или выражения. Окно проверки
настраивается  на  тип   отображаемых   данных.   В   нем   могут
отображаться  данные простых скалярных типов (целые, вещественные
и т.д.),  а также указатели,  массивы, записи, структуры и данные
объединенных  типов.  Элементы данных каждого типа отображаются в
форме,  максимально приближенной к той,  которая используется для
их записи в исходном тексте программы.

     Обратите внимание, что в отличие от окон, вызываемых из меню
View,  здесь имеется возможность  создавать  дополнительные  окна
проверки   просто   путем   повторного  выбора  команды  Inspect.
(Дополнительные окна модуля,  файла и процессора можно  открывать
только путем выбора пункта View/Another.)

Активное окно
-------------

     Несмотря на то,  что  в  отладчике  Turbo  Debugger  имеется
возможность  иметь  одновременно несколько открытых окон,  только
одно из них может являться активным. Активное окно можно отличить
по следующим признакам:

     - Активное окно окружено двойной рамкой, а не одинарной, как
остальные.

     -  Активным является  окно,  в  котором  находится  курсор  или
        выделяющая полоса.

     - Если окна перекрывают друг друга,  активное окно находится
поверх остальных.

     Когда вы выполняете команды, вводите текст или прокручиваете
содержимое  окна,  эти  действия  выполняются только над активным
окном и не влияют на все остальные окна,  которые были открыты  и
отображаются в данный момент на экране.

     Рис.2.3 Какое окно является активным?


Что такое окно
--------------

     Окно всегда  обладает большинством или всеми описанными ниже
средствами, позволяющими получить информацию  об  этом  окне  или
выполнить с ним некоторые действия:


     Рис.2.4  Типичное окно:
блок закрытия;  заголовок;  номер окна;  блоки панорамирования  и
пиктограммирования; линейка скроллинга; линейка установки размера


     - Рамка  (двойной линией,  если окно активно,  и одинарной а
противном случае).

     - Заголовок, расположенный в верхнем левом углу.

     - Линейка или линейка скроллинга в правой или  нижней  части
окна, если  окно  содержит  больше  информации,  чем  может  быть
выведено одновременно. С линейками скроллинга работает мышь:

        - Для перемещения изображения в окне на один символ или
          одну строку  нужно  нажать кнопку мыши на стрелке нужного
          направления, которые   находятся   на   концах   линеек
          скроллинга.

        - Для перемещения изображения в окне на одно окно в
          нужном направлении  следует  нажать  кнопку  мыши  на
          середине линейки, отмеченной серым цветом.

        - Для перемещения изображения в окне на произвольную
          величину следует выполнить буксировку  блока  скроллинга
          на нужное расстояние.

     - Блок  установки  размера  окна  в нижнем правом углу.  Для
установки желаемого размера окна нужно выполнить  ьуксировку  его
при помощи мыши.

     - Номер окна в правом верхнем углу, отображающий очередность
открытия данного окна.

     - Блок панорамирования и блок  пиктограммирования  в  правом
верхнем углу.  Слева  находится  пиктограмма  панорамирования,  а
справа - пиктограмми пиктограммирования.  Нажмите кнопку мыши  на
этих пиктограммах  для расширения окна до размера полного экрана,
восстановления исходного  размера  окна  или   пиктограммирования
данного окна.  (Когда окно панарамировано до полного размера,  то
доступным является только окно пиктограммирования,  а когда  окно
миктограммировано, то доступно только окно панорамировано.)

     - Блок закрытия в верхнем левом углу. Нажмите кнопку мыши на
данном блоке для закрытия окна.


Работа с окнами
---------------

     Каждое открываеемое вами окно нумеруется  в  верхнем  правом
углу. Обычно окно Module имеет номер 1, а окно Watches - номер 2.
Окно, открытое следующим, будет иметь номер 3 и т.д.

     Такая система нумерации представляет собой быстрый и простой
способ  перехода  между  окнами.  Любое из первых девяти открытых
окон можно сделать активным,  нажав клавишу  Alt  в  сочетании  с
номером  соответствующего окна,  Например,  если сделать активным
окно слежения,  нажав клавиши Alt-2,  то все  выбираемые  команды
будут  влиять  только на это окно и на переменные,  которые в нем
отображаются.

     Можно также  активизировать  окна  одно  за  другим,  выбрав
Window|Next  или  последовательно нажимая клавишу F6.  Это бывает
удобно в том случае,  если номер открытого  окна  закрыт  другими
окнами и неизвестно, какую клавишу надо нажать, чтобы сделать его
активным.

     F6 - это активная клавиша команды Window|Next Window.

     Если у вас имеется мышб,  можно активизировать окно нажатием
мыши.

     Чтобы просмотреть  список  всех  открытых окон,  выберите из
линейки меню Window. Turbo Debugger отобразит в нижней части меню
Window  список  до  девяти  открытых окон,  одно из которых можно
выбрать.  Чтобы выбранное из этого списка  окно  стало  активным,
нажмите клавишу с номером этого окна.

     Если окно  разбито на  несколько подокон  (участков, содержащих
различные типы данных), можно переходить от одного подокна к другому
с помощью клавиши Tab, Shift-Tab или команды Window/Next Pane.

     Tab и Shift-Tab - это активные клавиши для Window|Next Pane.

     Подокно можно также выбрать нажатием кнопки мыши.

     Больше всего  подокон  в отладчике Turbo Debugger имеет окно
процессора. Оно разбито на пять подокон.

     При переходе из одного подокна в другое можно  заметить, что
в  некоторых  случаях  в  подокне  появляется мигающий курсор,  в
других случаях вместо него  появляется  выделяющая  полоса.  Если
появляется  курсор,  значит  вы  можете  перемещаться по тексту с
помощью обычных команд  управления  курсором  (например,  клавиши
PgUp,  Ctrl-Home  и Ctrl-PgUp перемещают курсор соответственно на
один экран вверх,  в верхнюю часть  подокна  и  в  верхнюю  часть
списка).   Для   перемещения  курсора  внутри  окна  можно  также
использовать команды системы WordStar.  Список клавишных  команд,
которые  можно использовать в подокнах,  приведен в таблице главы
13.

     Если вместо курсора в  подокне  имеется  выделяющая  полоса,
можно  перемещать ее по списку с помощью тех же самых стандартных
клавиш  управления  курсором,  но  можно  использовать  и  другой
способ.  Например,  если элементы в списке состоят из букв, можно
выбирать их путем ввода букв с клавиатуры. При вводе каждой буквы
выделяющая  полоса перемещается к первому элементу, начинающемуся
с введенных к этому моменту букв.  Положение курсора в выделенном
элементе  показывает,  сколько букв данного названия уже введено.
Когда  выделяющая  полоса  достигает  нужного   элемента,   поиск
завершается.  Такой  поиск (или "выбор путем ввода") минимизирует
число символов,  которые  надо  ввести  для  выбора  элемента  из
списка.

     Когда элемент  выбран  из  списка  (выделен),  можно,  нажав
клавиши Alt-F10 или клавиши Ctrl-F10,  выбрать относящуюся к нему
команду  локального меню.  В большинстве списков после того,  как
элемент выбран,  бывает  достаточно  нажать  клавишу  Enter.  Она
действует   как   активная   клавиша   одной  из  наиболее  часто
используемых команд локального меню. Точная функция клавиши Enter
для  подобных  случаев описана в разделе "Команды локальных меню"
главы 13.

     И наконец, в некоторых подокнах можно сразу начинать вводить
новое  значение или строку для поиска без предварительного выбора
команды.  Это обычно используется для наиболее часто используемой
команды  подокна или окна,  такой как команда Goto в окне модуля,
команда Search в окне файла или команда Change в  окне регистров.

Изменение и сохранение размеров окон
------------------------------------

     Когда Turbo  Debugger создает  новое окно,  оно  появляется  на
экране около  текущего положения  курсора и  имеет установленный  по
умолчанию размер,  удобный для данного окна. Размер и местоположение
окна можно изменить с помощью команды меню Window|Size/Move.

     Ctrl-F5 - это активная клавиша команды Window|Size/Move.

     После выбора этой команды рамка  активного  окна  становится
одинарной. После этого с помощью клавиш перемещения курсора можно
изменить положение окна на экране,  либо при помощи  этих  клавиш
совместно  со  стрелками - изменить размер окна на экране.  Чтобы
зафиксировать положение окна, надо нажать клавишу Enter.

     Если у вас имеется мышь,  то перемещение и изменение размера
окна упрощается:

     - Отбуксируйте блок установки размера,  находящийся в правом
нижнем углу, в нужную вам позицию, чтобы изменить раззмер окна.

     - Отбуксируйте линейку заголовка или любую  крайнюю  линейку
(но не  линейки скроллинга),  чтобы изменить расположение окна на
экране.

     F5 - это активная клавиша команды Window|Zoom.

     Если необходимо  быстро увеличить  (или уменьшить) размер окна,
можно выбрать команду Window|Zoom или нажать кнопку мыши на блоке
панорамирования или пиктограммирования  в  правом  верхнем  углу,
соответственно.

     И наконец, если вам нужно временно выйти из данного окна без
его закрытия, активизируйте его, а затем выберите Window|Iconize/
Restore. При  этом  окно сократится таким образом,  что останется
только небольшой прямоугольник  (пиктограмма)  с  именем,  блоком
закрытия, и блоком панорамирования.  Для восстановления исходного
размера окна   сделайте   его   активным   и    сновы    выберите
Window|Iconize/Restore, либо   нажмите   кнопку   мыши  на  блоке
панорамирования.

Закрытие и восстановление окон
------------------------------

     При работе   с   окном   вы   можете   закрыит  его,  выбрав
Window|Close, или  нажав  Alt-F3,  активную  клавишу  для  данной
команды.

     Alt-F3 - это активная клавиша команды Window|Close.

     Если у вас имеется мышь, то вы можете нажать кнопку на блоке
закрытия, который находится в верхнем левом углу окна.

     Если вы закрыли окно ошибочно,  то его  можно  восстановить,
выбрав Window|Undo  Close  или нажав Alt-F6.  Этот способ годится
только для последнего закрытого окна.

     Alt-F6 - это активная клавиша команды Window|Undo Close.

     Вы также   можете   восстановить   экран   Turbo    Debugger
соответственно макету  экрана,  который  действовал  при  входе в
программу в первый  раз.  Выберите  для  этого  =(System)|Restore
Standard.

     И наконец,    если    ваша    программа    заменила    экран
интегрированной среды отладчика собственным выводом  (из-за того,
что вы выключили своппинг экрана),  можно очистить и восстановить
экран при помощи =(System)|Repaint Desktop.

Сохранение макета экрана
------------------------

     Можно также   использовать   команду  Options/Save  Options,
которая позволяет сохранить выбранные параметры окон  после того,
как экран настроен пользователем по своему усмотрению.  Для этого
в  диалоговом  блоке  Save  Configuration  при   помощи   клавиши
табуляции  выберите  пункт  Layout  и  при помощи клавиши пробела
переключите  его  во  включенное  состояние.  Теперь  при  каждом
последующем  запуске  отладчика Turbo Debugger из DOS экран будет
выглядеть именно так, поскольку его конфигурация была сохранена в
файле  TDCONFIG.TD.  Это единственный файл конфигурации,  который
загружается автоматически при запуске отладчика  Turbo  Debugger.
Другие  файлы конфигурации могут быть загружены с помощью команды
Options/Restore Options.

Предоставление подсказки пользователю

     Как видите,  Turbo Debugger делает все,  что возможно, чтобы
максимально  облегчить  пользователю процесс отладки.  Он требует
помнить  минимальное  количество  команд,  он  сохраняет   список
введенных  с клавиатуры текстов на тот случай,  если пользователь
захочет повторить один из них,  он позволяет определять макросы и
обеспечивает исключительно удобное управление окнами. Но несмотря
на все это,  Turbo Debugger остается очень сложной  программой  с
большим  количеством  функций и команд.  Чтобы избежать возможных
затруднений,  Turbo Debugger предоставляет пользователю  экранную
подсказку, имеющую следующие особенности:

     - Текущее   действие,   выполняемое   пользователем,  всегда
отображается на экране специальным индикатором,  расположенным  в
верхнем  правом  углу экрана.  Например,  если курсор находится в
каком-либо  окне,  этот  индикатор  действия   показывает   READY
(готов);   если  на  экран  вызвано  какое-либо  меню,  индикатор
показывает MENU (меню);  если курсор находится  в  поле  запроса,
индикатор  показывает  PROMPT  (запрос).  Если  вы  затрудняетесь
определить,  что в данный момент  происходит  в  среде  отладчика
Turbo  Debugger,  используйте в качестве подсказки этот индикатор
текущего действия.  (Другими возможными "показаниями"  индикатора
текущего    действия    являются    MOVE/RESIZE,   MOVE,   ERROR,
RECORDING,WAIT, RUNNING, MENU, HELP, STATUS и PLAYBACK.)

     - Помните,  что активное  окно  всегда  отображается  поверх
остальных окон и окружено двойной рамкой.

     - Нажав клавишу F1, можно получить доступ к обширной системе
контекстно-зависимой подсказки.

     - В нижней  строке  экрана  всегда  предоставляется  краткий
перечень  команд,  вызываемых  нажатием  клавиш.  Содержимое этой
строки изменяется при смене контекста и при нажатии  клавиши  Alt
или  Ctrl.  Когда вы находитесь в системе меню,  строка состояния
содержит оперативный комментарий к текущей команде меню.

     Более подробная информация  о  двух  последних  возможностях
экранной подсказки приведена в следующем разделе.

Интерактивная подсказка
-----------------------

     Turbo Debugger,  как и  остальные  продукты  фирмы  Borland,
предоставляет    пользователю    контекстно-зависимую    экранную
подсказку,  которая вызывается нажатием одной клавиши.  Подсказка
доступна в любой момент,  как при работе с меню или окном,  так и
при выдаче на экран сообщения об ошибке или запроса.

     Нажатие клавиши F1 вызывает на экран окно  подсказки (Help),
содержащее информацию, связанную с текущим контекстом. Если у вас
имеется "мышь",  то вы можете получить подсказку, нажав кнопку на
линейке  состояния.  Некоторые  экраны подсказки имеют выделенные
ключевые  слова,  которые   позволяют   получать   дополнительную
подсказку  по  выделенному  элементу.  Для  того чтобы перейти от
одного ключевого слова к другому,  используйте Tab или Shift-Tab,
а  затем  нажмите  клавишу  Enter,  чтобы  вызвать  подсказку  по
выбранному  элементу.  Для  того  чтобы  перейти  к  первому  или
последнему   ключевому   слову   на  экране,  можно  использовать
соответственно клавиши Home и End.

     Подсказку можно также получить,  выбрав Help из линейки меню
(Alt-H).

     ----------------------
     Index         Shift-F1
     Previous topic  Alt-F1
     Help on help
     ----------------------

     Если требуется  вернуться  к  предыдущему  экрану подсказки,
надо нажать клавиши Alt-F1 или выбрать команду Previous  из  меню
Help.. Находяся в системе подсказки, можно с помощью клавиши PgUp
просматривать до 20 последних экранов подска  зки.  Клавиша  PgDw
работает  только  в  том  случае,  если  вы просматриваете экраны
подсказки,  связанные  с  контекстом.   Чтобы   вызвать   именной
указатель (Index), надо нажать клавишу Shift-F1 (или , находясь в
системе подсказки,  F1),  либо выбрать Index из  меню  Help.  Для
получения справки по самой сисиеме интерактивной подсказки, нужно
выбрать  Help|Help  on   Help.   Выход   из   системы   подсказки
осуществляется по клавише Esc.

     Можно получить  интерактивную  подсказку  по резервированным
словам при помощи THELP.COM.

     Если вы работаете с Turbo  Pascal  или  Turbo  С  и  желаете
получить подсказку  по  резервированным  словам или функциям этих
языков, как это делается в интегрированной  среде соответствующих
языков при  отладке,  это  можно  сделать  при помощи резидентной
утилиты THELP.COM,  поставляемой с Turbo Pascal и  Turbo  С.  Для
этого:

     1. Убедитесь,    что   THELP.COM   и   файл   подсказки   по
соответствующему языку (TURBO.HLP для Turbo Pascal  и  TCHELP.TCH
для Turbo  С)  скопированы  в  директорию  с  Turbo  Debugger или
директорию, определяемую командой PATH.

     2. Наберите THELP и нажмите Enter.

     3. Войдите в Turbo Debugger.

     4.Для того,  чтобы открыть экран подсказки для интересующего
вас резервированного  слова  или  функции,  установите  курсор  в
позицию, где  набрано  это  слово,   и   нажмите   цифру   5   на
вспомогательной числовой  клавиатуре.  (Если нажать 5 на основной
клавиатуре, THELP.COM не сработает).

     5. Заитем интерактивной подсказкой  можно  пользоваться  так
же, как в отладчике интерактивной среды, причем Alt-F1 служит для
возврата к предыдущему экрану,  а нажатие Enter  дает  вам  экран
подсказки по выбранному ключевому слову.

     6. для выхода из экрана Help нажмите Esc.

     Более подробную  информацию  о THELP см.  в файле THELP.DOC,
поставляемом с используемым вами языком.

Строка состояния
----------------

     В каком  бы  месте среды Turbo Debugger вы не находились,  в
нижней строке экрана всегда приводится подсказка в  виде  перечня
команд отладчика.  В этой строке в явном виде перечислены команды
отладчика и клавиши для их вызова, доступные в текущем контексте.

Подсказка в окне

     Обычно в  строке состояния перечислены команды,  выполняемые
по нажатию функциональных клавиш. Она выглядит следующим образом:

     Рис.2.5 Нормалный вид строки состояния

     Если в течение одной-двух  секунд  держать  нажатой  клавишу
Alt,  в справочной строке появится список команд,  выполняемых по
нажатию клавиши Alt в сочетании с функциональными клавишами.

     Рис.2.6 Вид строки состояния при нажатой клавише Alt

     Если в течение одной-двух  секунд  держать  нажатой  клавишу
Ctrl,  в справочной строке появится список команд, выполняемых по
нажатию  клавиши  Ctrl  в  сочетании  с  алфавитными   клавишами.
Содержание  этой  строки подсказки зависит от того,  какое окно и
подокно является текущим;  она содержит одноклавишные эквиваленты
команд  текущего  локалного  меню.  Если в локальном меню имеется
больше команд,  чем  можно  поместить  в  нижней  строке  экрана,
показываются   только   первые  клавиши.  Все  доступные  команды
локального меню можно  просмотреть,  нажав  клавиши  Alt-F10  или
клавиши Ctrl-F10, вызывающие на экран все меню.

     Рис.2.7 Вид строки состояния при нажатой клавише Ctrl

     Если у  вас  имеется  "мышь",  то вы можете нажать кнопку на
строке состояния, и будет выполнена команда Alt- или Ctrl.

Подсказка в меню или блоке диалога

     Когда вы   находитесь  в  меню  или  блоке  диалога,  строка
состояния выводит однострочный комментарий к выбранному в текущий
момент пункту меню тлт блока. Например, если высвечен пункт View|
Register, то строка состояния будет содержать фразу "Open  a  CPU
register window" ("Открытие окна регистров процессора").

     В глобальном   или  локальном  меню  строка  состояния  дает
подсказку по соответствующему меню.
