Турбо отладчик (Turbo Debugger) 3.0

         

по которой на экран выведется


       Pick (Выбор),  по которой на экран выведется всплывающее меню  со
       всеми открытыми окнами.
            Если окно  разбито  на области (каждая область резервируется
       для данных конкретного типа),  то от одной области к другой можно
       переходить с помощью команды Window¦Next Pane (Окно¦Следующая об-
       ласть) или клавиш Tab (либо Shift-Tab).
            Переходить из одной области в другую можно также  с  помощью
       "мыши".
            Больше всего областей (6 областей при использовании TDW) со-
       держит окно CPU (ЦП).
            При переходе  от  одной области к другой вы можете заметить,
       что в некоторых областях появляется мерцающий курсор,  а в других
       - строка подсветки.  Если появляется курсор, то вы можете переме-
       щаться по тексту с помощью стандартных клавиатурных команд  (нап-
       ример, команды PgUp, Ctrl-Home и Ctrl-PgUp перемещают курсор, со-
       ответственно,  вверх на один экран, к вершине области или к концу
       списка. Для перемещения в области окна можно  также  использовать
       оперативные клавиши,  аналогичные тем, которые используются в ре-
       дакторе WordStar (список используемых в областях клавиатурных ко-
       манд приведен в Главе 13).


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

для него соответствующей команды локального


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

       TDeb 3.0 #1-3                = 54 =
       действует, как оперативная клавиша. Точная функция этой клавиши в
       каждом случае описывается в Главе 13.
            Наконец, некоторые  области позволяют вам начать ввод нового
       значения или строки поиска,  не выбирая сначала  команду.  Обычно
       это относится  к  наиболее часто используемым командам локального
       меню в области или окне,  типа  команды  Goto  (Переход)  в  окне
       Module, команды  Search  (Поиск) в окне File,  или команды Change
       (Изменение) в окне Registers.
                   Перемещение окон и изменение их размера
       -----------------------------------------------------------------
            Когда вы в Турбо отладчике открываете новое окно,  оно появ-
       ляется вблизи текущей позиции курсора и имеет размер,  использую-
       щийся по умолчанию для данного типа окон. Если вы сочтете положе-
       ние или  размер окна неудобным,  для их настройки можно использо-
       вать команду Window¦Size/Move (Окно¦Размер/Перемещение).
            При перемещении окна или изменении его размера рамка текуще-
       го окна изменяется и становится одинарной. При этом вы можете для
       перемещения окна  использовать  клавиши стрелок,  а для изменения
       его размера - клавишу Shift совместно с клавишами  стрелок. Когда
       вы будет  удовлетворены  полученным результатом,  нажмите клавишу
       Enter.
                 Примечание: Команде Window¦Size/Move соответствуют опе-
            ративные клавиши Ctrl-F5.
            При наличии  "мыши"  перемещение окон и изменение их размера
       еще более облегчается:

Для перемещения окна захватите заголовок


            - Захватите "мышью" пиктограмму изменения размера  в  нижнем
              правом углу окна и измените его размер.
            - Для перемещения окна захватите заголовок окна за любой его
              край и переместите окно.
            Если вы хотите быстро увеличить ("распахнуть") или уменьшить
       размер окна, выберите команду Window¦Zoom (Окно¦Переключение раз-
       мера)  или  нажмите кнопку "мыши",  переместив указатель на рамку
       переформатирования или переключения размера окна в правом верхнем
       его углу.
                 Примечание: Команде Window¦Zoom соответствуют оператив-
            ная клавиша F5.
            Наконец, если  вы хотите временно избавиться от окна,  но не
       хотите его закрывать,  сделайте его активным,  а  затем  выберите
       команду Window¦Iconsize/Restore (Окно¦Сжатие/Восстановление). Ок-
       но сожмется до маленького прямоугольника,  при этом  будут  видны
       только его имя,  пиктограмма закрытия и пиктограмма переключения.
       Для восстановления окна выберите  команду Window¦Iconsize/Restore

       TDeb 3.0 #1-3                = 55 =
       еще раз, или щелкните кнопкой "мыши", установив указатель на пик-
       тограмму переключения размера.
                       Закрытие и восстановление окон
       -----------------------------------------------------------------
            При работе в окне его можно закрыть с помощью команды Window
       ¦Close (Окно¦Закрытие) или нажатия оперативных клавиш Alt-F3.
            При наличии "мыши" вы можете также щелкнуть  кнопкой "мыши",
       установив указатель  в  пиктограмме закрытия окна в левом верхнем
       углу.
                 Примечание: Команде Window¦Close  соответствуют  опера-
            тивные клавиши Alt-F3.
            Если вы закрыли окно по ошибке, его можно восстановить с по-
       мощью команды Window¦Undo Close (Окно¦Отменить закрытие) или  на-

Вы можете также восстановить для


       жатия клавиш  Alt-F6 (это относится только к последнему закрытому
       вами окну).
            Вы можете также восстановить для экрана Турбо  отладчика  ту
       схему, которая у него была, когда первоначально вошли в Турбо от-
       ладчик. Это можно сделать с помощью  команды  системного меню  Ё¦
       Restore Standard (Система¦Восстановление стандартной схемы).
                 Примечание: Команде   Window¦Undo  Close  соответствуют
            оперативные клавиши Alt-F6.
            Наконец, если  ваша  программа  затерла  своим выводом экран
       операционной среды (из-за выключенного переключения  экранов), вы
       можете  очистить  его с помощью команды системного меню Ё¦Repaint
       Desktop (Система¦Восстановление оперативной области экрана).
                   Сохранение используемой вами схемы окон
       -----------------------------------------------------------------
            Для сохранения выбранной вами схемы окон используйте команду
       Options¦Save options (Параметры¦Сохранение параметров).  В диало-
       говом окне Save Configuration (Сохранение конфигурации) перейдите
       с помощью клавиши Tab на переключатель Layout (Схема) и для вклю-
       чение его нажмите клавишу пробела. После этого, если конфигурация
       сохранена в файле TDCONFIG.TD, при каждом запуске Турбо отладчика
       из  среды операционной системы DOS он будет выводить экран с выб-
       ранной вами  схемой  окон.  С  помощью  команды   Options¦Restore
       options (Параметры¦Восстановление  параметров) можно также загру-
       зить другую конфигурацию,  если она была сохранена в файле конфи-
       гурации с другим именем.
                            Копирование и вставка
       -----------------------------------------------------------------
            Турбо отладчик  содержит  расширенное средство копирования и

       TDeb 3.0 #1-3                = 56 =
       вставки, которое  называется  буфером   вырезанного   изображения

С помощью кармана вы можете


       (Clipboard) или "карманом". С помощью кармана вы можете выполнять
       копирование и вставку между окнами  Турбо отладчика и диалоговыми
       окнами.
            Копируемые в  карман  элементы являются динамическими.  Если
       элемент имеет соответствующее значение, то в кармане хранится те-
       кущее значение по мере его изменения в программе.
            Для копирования  элемента в карман установите курсор на эле-
       менте или установите на нем подсветку с помощью клавиши Ins,  за-
       тем нажмите клавиши Shift-F3.  Чтобы вставить что-либо из кармана
       в окно или в диалоговое окно,  нажмите клавиши Shift-F4  или  ис-
       пользуйте для вывода диалогового окна Clipboard "кнопку" Clip.
            Примечание: Для  отметки нескольких элементов в списке можно
       использовать клавишу Ins.
            Нажимая клавиши Shift-F4, вы можете выполнять вставку в поле
       подсказки  диалогового  окна  (любое место диалогового окна,  где
       можно вводить текст),  даже если окно не содержит  "кнопки"  Clip
       (Вырезать). Вы можете также выполнять вставки в диалоговые окна с
       несколькими полями подсказки.

       TDeb 3.0 #1-3                = 57 =
                          Диалоговое окно Clipboard
       -----------------------------------------------------------------
            При нажатии  клавиш  Shift-F4  или активизации "кнопки" Clip
       выводится содержимое диалогового окна C[ipboard,  и  показываются
       категории, которые  вы можете использовать для вставки элемента в
       диалоговое окно.
       г=[*]============================Pick (C)=======================¬
       ¦                                                               ¦
       ¦ Clipboard                                                     ¦
       ¦ -@#TCDEMO#36-------------------------     (.) String          ¦
       ¦ -------------------------------------     ( ) Location        ¦

В данном  диалоговом  окне  выводится 


       ¦ -------------------------------------     ( ) Context         ¦
       ¦ -------------------------------------                         ¦
       ¦ -------------------------------------                         ¦
       ¦    OK    Paste   Cancel     Help                              ¦
       ¦    ---   -----   ------     ------                            ¦
       L===============================================================-
            Рис. 2.5 Диалоговое окно Clipboard Paste
            String - строка;  Location - адрес; Context - содержимое; OK
       - нормально; Paste - вставка; Cancel - отмена; Help - справка
            В данном  диалоговом  окне  выводится  прокручиваемый список
       элементов кармана.  Оно позволяет вам  интерпретировать  элемент,
       как вставляемый  одним из трех способов:  как строку,  как адрес,
       или как содержимое по адресу.  Категории,  которые вы можете  ис-
       пользовать для вставки элемента, зависят от его типа и назначения
       (см. далее).
            Например, если вы вырежете текст из окна  Log (Регистрация),
       его можно  вставить только как строку.  Если вы вырежете текст из
       окна Module (Модуль),  то его можете вставить где-либо как строку
       или как адрес, но не как содержимое. Если вы извлечете переменную
       из  окна  Inspector (Проверка), то его можно вставить как строку,
       как адрес  или как содержимое (если это не регистровая переменная
       Си - в этом случае вы можете вставить ее как строку или  как  со-
       держимое, но не как адрес).
            Для вставки элемента в диалоговое окно,  подсветите элемент,
       выделите соответствующую категорию,  затем нажмите клавишу  Enter
       или активизируйте "кнопку" Paste (Вставка), какой эффект вы хоти-
       те получить в диалоговом окне.
            - Нажатие клавиши Enter просто вставляет элемент и возвраща-
              ет вас в диалоговое окно.
            - Активизация  "кнопки"  Paste  вставляет элемент и передает

Буфер вырезанного изображения) выводит на


              клавишу Enter, что приводит к выполнению функции.
                               Окно Clipboard

       TDeb 3.0 #1-3                = 58 =
       -----------------------------------------------------------------
            Для того,  чтобы  вы   могли   увидеть   содержимое   буфера
       Clipboard,   имеется   окно  View  (Обзор).  Выбор  команды  View
       ¦Clipboard (Обзор¦ Буфер вырезанного изображения) выводит на экран
       окно Clipboard,  в котором перечисляются все вырезанные элементы.
             г=[*]=Clipboard=========================================¬
             ¦ Module          : @#TCDEMO#36 nlines                  ^
             ¦ Inspector       : nlines                  0 (0x0)     -
             ¦ Module----------:-@#TCDEMO#38-totalcharacters-------- -
             ¦ Inspector       : totalcharacters         0 (0x0)     -
             ¦                                                       v
             L<----------------------------------------------------->-
            Рис. 2.6 Окно Clipboard
            В левом  поле этого окна описывается тип записи,  за которым
       следует двоеточие и вырезанный (забранный в карман) элемент. Если
       вырезанный  элемент  представляет  собой  выражение из окна Watch
       (Просмотр),  переменную из окна Inspector (Проверка) или  данные,
       регистр или флаг из окна CPU то за элементом следует его значение
       или значения.

       TDeb 3.0 #1-3                = 59 =
                        Типы элементов окна Clipboard
       -----------------------------------------------------------------
            Когда вы забираете из окна элемент,  Турбо отладчик присваи-
       вает ему  тип и помогает идентифицировать источник элемента. Типы
       Clipboard показаны в следующей таблице:
                           Типы элементов Clipboard          Taблица 2.2
       -----------------------------------------------------------------
       Тип                Описание

Текстовая строка, например, отмеченный блок


       -----------------------------------------------------------------
       String             Текстовая строка, например, отмеченный блок из
                          окна File.
       Module             Содержимое модуля, включая позицию в  исходном
                          коде, аналогично переменной из окна Module.
       File               Позиция в файле (в окне File), которая не  яв-
                          ляется модулем в программе.
       CPU code           Адрес и список байт выполняемых инструкций  из
                          области кода окна CPU (ЦП).
       CPU data           Адрес и список байт данных в памяти из области
                          данных в окне CPU или в окне Dump (Дамп).
       CPU stack          Исходная позиция и кадр стека из области стека
                          окна CPU.
       CPU register       Имя  регистра  и значение из области регистров
                          окна CPU или окна Register.
       CPU flag           Значение флага ЦП из области флагов окна CPU.
       Inspector          Одно из следующих:
                              - имя переменной из окна Inspector;
                              - значение константы  из  окна  Inspector
                                или Watch;
                              - регистровая переменная окна Inspector;
                              - битовое поле окна Inspector.
       Address            Адрес без соответствующих данных или кода.
       Expression         Выражение из окна Watches.
       Coprocessor        Регистр арифметического сопроцессора 80х87.
       Control flag       Значение управляющего флага сопроцессора.
       Status flag        Значение флага состояния сопроцессора 80х87.
       -----------------------------------------------------------------

       TDeb 3.0 #1-3                = 60 =
                        Локальное меню окна Clipboard
       -----------------------------------------------------------------
            Если, находясь в окне Clipboard,  вы нажмете клавиши Alt-F10

выполнения команды вы можете также


       или щелкните  правой кнопкой "мыши",  то слева увидите меню.  Для
       выполнения команды вы можете также нажать клавишу Ctrl и  подсве-
       тить клавишу локального меню.
                         -------------------¬
            Проверка     ¦ Inspect          ¦
            Удаление     ¦ Remove           ¦
            Удалить все  ¦ Delete all       ¦
            "Заморозить" ¦ Freeze           ¦
                         L-------------------

       TDeb 3.0 #1-3                = 61 =
                Команды локального меню окна Clipboard Таблица 2.3
       -----------------------------------------------------------------
       Команда           Описание
       -----------------------------------------------------------------
       Inspect           Позиционирует курсор в то окно, из которого был
                         извлечен элемент.
       Remove            Удаляет подсвеченный элемент или элементы.  Тот
                         же эффект для подсвеченного элемента имеет кла-
                         виша Del.
       Delete all        Удаляет все в буфере Clipboard.
       Freeze            Приостанавливает динамическое  обновление  эле-
                         мента Clipboard.
       -----------------------------------------------------------------
                           Динамическое обновление
       -----------------------------------------------------------------
            Clipboard динамически обновляет любой элемент с соответству-
       ющим значением,  например,  выражение из окна Wathes,  переменную
       окна Inspector или регистр окна CPU.  При желании вы  можете  ис-
       пользовать окно Clipboard также как окно Watch, и можете по свое-
       му усмотрению "замораживать" любой элемент.
                 Примечание: О выражения просмотра окна Watch более под-
            робно рассказывается в Главе 6.
            Например, вы можете поместить в окно Clipboard выражение ок-

Для этого перейдите сначала в 


       на Watches.  Для этого перейдите сначала в  окно  Watches,  затем
       нажмите клавиши Shift-F3 для копирования в окно Clipboard. Значе-
       ние элемента после этого будет изменяться точно так же,  как если
       бы он находился в окне Watches,  пока для запрещения точки  прос-
       мотра вы не используете команду Freeze.
            Одно из  преимуществ  наблюдения  за   выражением   в   окне
       Clipboard заключается в том,  что вы можете  приостановить обнов-
       ление определенного значения,  затем продолжить выполнение  прог-
       раммы и  сравнить  прежнее значение с измененным значением в окне
       Watches.

       TDeb 3.0 #1-3                = 62 =
                  Замечания по использованию окна Clipboard
       -----------------------------------------------------------------
            Способы использования  окна Clipboard слишком многочисленны,
       чтобы их можно было здесь перечислить.  Вы можете,  например, де-
       лать следующее:
            - вырезать элементы окна Module,  отмечая адреса,  к которым
              вы можете возвратиться с помощью команды  локального  меню
              Goto (вставив адрес в выводимое по этой команде диалоговое
              окно);
            - наблюдать за выражением (см. предыдущий раздел);
            - вставлять новые значения в переменные с помощью диалогово-
              го окна Data¦Evaluate (Данные¦Вычисление)  или диалогового
              окна  команды Change (Изменение) окна Inspector (Проверка)
              или окна Watches (Просмотр);
            - вставка строк в окно Log (Регистрация),  что  поможет  вам
              отслеживать, что вы делали в процессе сеанса отладки;
            - вставлять  адрес  (категория элемента location) в любое из
              тех мест,  где запрашивается адрес (например, поле Address
              диалогового  окна Breakpoint¦Options (Точка останова¦Пара-
              метры) или диалоговое окно Run¦Execute To  (Выполнение¦Вы-

в условия точек останова  и 


              полнение до...)).
            - вставлять выражения в условия точек останова  и  действия,
              выполняемые по точкам останова;
            - вставлять параметры в диалоговое окно Run¦Arguments (Выпо-
              лнение¦Аргументы);
            - вставлять имя процедуры Windows или имя объекта OWL в окно
              Windows Messages;
            - вставлять строку в команде Search (Поиск) окна Module (Мо-
              дуль);
            - копировать данные из области данных окна CPU  и  вставлять
              их в это окно;
            - копировать  код  из  одной части окна CPU в другую и затем
              выполнять программу с этим кодом.
                       Получение справочной информации
       -----------------------------------------------------------------
            Как вы видите,  Турбо отладчик делает все,  чтобы  облегчить
       вам процесс отладки.  Вам не нужно помнить различные команды,  он
       сохраняет то, что вы вводите, на тот случай, если вы захотите это

       TDeb 3.0 #1-3                = 63 =
       повторить. Он  предлагает  также исчерпывающее управление окнами.
       При этом Турбо отладчик представляет собой развитую  программу со
       множеством средств  и команд.  Чтобы избежать возможной путаницы,
       Турбо  отладчик предлагает следующие справочные средства:
            - Индикатор активности в левом правом углу экрана всегда по-
              казывает текущее состояние. Например, если курсор находит-
              ся в окне,  в индикаторе активности выводится  READY  (Го-
              тов).  Если выводится меню, в нем указывается MENU, а если
              вы находитесь в диалоговом окне - PROMPT (Подсказка). Если
              вы,  запутаетесь и не можете понять,  что происходит в от-
              ладчике, взгляните на индикатор  активности.  (В  качестве
              примеров режима индикатора активности можно привести также
              SIZE¦MOVE (Размер¦Перемещение),  MOVE (Перемещение), ERROR

всегда находится на переднем плане


              (Ошибка),  RECORDING  (Запись),  WAIT (Ожидание),  RUNNING
              (Выполнение), MENU (Меню), HELP (Справка), STATUS (Состоя-
              ние) и PLAYBACK (Обратное выполнение).
            - Активное  окно  всегда находится на переднем плане и имеет
              двойную рамку.
            - С помощью клавиши F1 вы можете получить доступ  к развитой
              контекстной справочной системе. По данной клавише на экран
              выводится список тем, из которых вы можете выбрать необхо-
              димую.
            - В  строке  состояния  в  нижней части экрана всегда дается
              краткая информация об используемых  клавиатурных командах.
              При нажатии клавиши Alt или Ctrl данная строка изменяется.
              Когда вы находитесь в системе меню,  эта строка предлагает
              вам оперативное описание текущей команды меню.
            Более подробная информация о последних двух средствах содер-
       жится в следующих двух разделах.

       TDeb 3.0 #1-3                = 64 =
                             Оперативная помощь
       -----------------------------------------------------------------
            В Турбо  отладчике,  как и в других продуктах фирмы Borland,
       встроен контекстно-зависимый оперативный справочник.  Он доступен
       как при  работе  в  системе  меню,  так и при выводе сообщения об
       ошибке или подсказки.
            Для вывода справочного экрана с информацией,  относящийся  к
       текущему контексту (окну или меню) нажмите клавишу F1.  При нали-
       чие "мыши" вы можете вывести справочный экран, выбрав F1 в строке
       состояния. Некоторые справочные экраны содержат подсвеченные сло-
       ва, которые позволяют вам получить дополнительную  информацию  по
       данной теме. Для перемещения к нужным ключевым словам используйте
       клавиши Tab  или Shift-Tab и нажмите клавишу Enter. Для перемеще-
       ния к первому или последнему слову на экране  используйте клавиши

к оперативным  справочным  средствам  можно 


       Home и End.
            Доступ к оперативным  справочным  средствам  можно  получить
       также с  помощью команды Help (Справка) из строки меню (оператив-
       ные клавиши Alt-H).
                                         ---------------------------¬
              Индекс                     ¦ Index           Shift-F1 ¦
              Предыдущая тема            ¦ Previous topic    Alt-F1 ¦
              Информация по справочнику  ¦ Help on help             ¦
                                         L---------------------------
            Если вы хотите вернуться к предыдущему  справочному  экрану,
       нажмите клавиши Alt-F1 или выберите команду Previous (Предыдущий)
       из меню Help (Справка).  В справочной системе для просмотра  пос-
       ледних 20  экранов можно пользоваться клавишей PgUp (клавиша PgDn
       работает, когда вы находитесь в группе  связанных  экранов).  Для
       доступа к   индексному   указателю   справочной  системы  нажмите
       Shift-F1 (или F1 в справочной системе) или выберите команду Index
       в меню Help.  Для получения информации о самой справочной системе
       выберите в меню Help команду Help¦Help.  Для выхода из справочной
       системы нажмите клавишу Esc.
            Если вы используете Турбо Паскаль или Borland C++  и  хотите
       получать  справочную  информацию по зарезервированным словам этих
       языков и их функциям (как во встроенных  отладчиках  данных  язы-
       ков),  это можно сделать с помощью резидентной в памяти программы
       с именем THELP.COM,  которая  поставляется  с  Турбо  Паскалем  и
       Borland C++. Чтобы использовать ее, необходимо:
            1. Скопировать в ваш каталог Турбо отладчика или  в каталог,
               указанный  в  маршруте, файлы THELP.COM и соответствующий
               справочный файл компилятора (TURBO.HLP в  Турбо  Паскале,
               TCHELP.TCH в  Турбо Си и Borland C++,  TASM.TAH для Турбо
               Ассемблера).

по одному из зарезервированных слов


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

       TDeb 3.0 #1-3                = 65 =
            3. Перейдите в Турбо отладчик.
            4. Для  получения  справочной  информации  (открытия  экрана
               Help)  по одному из зарезервированных слов позиционируйте
               курсор под этим словом и нажмите 5 на числовой (вспомога-
               тельной) клавиатуре.
            5. После этого вы можете пользоваться справочной информацией
               также, как в интегрированном отладчике, используя клавиши
               Alt-F10 для возврата к предыдущему экрану, и нажимая кла-
               вишу Enter для вывода справочной информации по выбранному
               слову.
            6. Для  выхода  из  справочного  экрана HRLP нажмите клавишу
               Esc.
            Более подробно о THELP  рассказывается  в  файле  THELP.DOC,
       поставляемой с соответствующим компилятором.
                              Строка состояния
       -----------------------------------------------------------------
            При работе в Турбо отладчике в нижней части экрана выводится
       краткая справочная строка. В этой строке состояния кратко описаны
       клавиши или команды меню для текущего контекста.
                                    В окне
            Когда вы  находитесь  в  окне,  в  строке состояния показаны
       обычно команды, которые выполняются по функциональным клавишам:
       -----------------------------------------------------------------
       F1 - Help  F2 - Bkpt  F3 - Mod  F4 - Here  F5 - Zoom  F6 - Next
       F7 - Trace  F8 - Step  F9 - Run  F10 - Menu
       -----------------------------------------------------------------
            Рис. 2.7 Обычная строка состояния
       (F1 - Справка;  F2 - Точки останова; F3 - Режим; F4 - Здесь; F5 -
       Переключение;  F6 - Следующий;  F7 - Трассировка;  F8 - Шаг; F9 -
       Выполнение; F10 - Меню.)
            Если вы  нажмете клавишу Alt и удержите ее в таком состоянии

Строка состояния при нажатой


       секунду-другую, то на экран  выведутся  команды,  выполняемые  по
       клавише Alt:
       -----------------------------------------------------------------
       Alt: F2 - Bkpt to F3 - Close  F4 - Back  F5 - User  F6 - Undo  F7
       - Instr  F8 - Rtn F9 - To  F10 - Local
       -----------------------------------------------------------------

       TDeb 3.0 #1-3                = 66 =
            Рис. 2. 8 Строка состояния при нажатой клавише Alt
       (Alt: F2 - Точка останова; F3 - Закрыть; F4 - Обратно; F5 - Поль-
       зователь;  F6 - Отменить; F7 - Инструкции; F8 - Возврат; F9 - На;
       F10 - Локальный.)
            Если вы нажмете у будете удерживать клавишу Ctrl,  то на эк-
       ран выведутся команды, выполняемые при нажатии клавиши Ctrl и со-
       ответствующей буквы. Эта строка состояния изменяется в зависимос-
       ти от текущего окна и области и показывает сокращенные эквивален-
       ты  команд  текущего  локального меню.  Вы можете просмотреть все
       доступные команды локального меню, нажав клавиши Alt-F10 или Ctrl
       -F10 (при этом выведется все меню).
       -----------------------------------------------------------------
       Ctrl:I-Inspect W-Watch M-Module F-File P-Previous L-Line S-Search
       N-Next
       -----------------------------------------------------------------
            Рис. 2.9 Строка состояния при нажатой клавише Ctrl
       (Ctrl: I - Проверка; W - Просмотр; M - Модуль; F - Файл; P - Пре-
       дыдущий; L - Строка; S - Поиск; N - Следующий.)
            При наличии "мыши" для выполнения нужной команды нужно уста-
       новить курсор в соответствующей позиции строки состояния и нажать
       кнопку "мыши".
                         В меню или диалоговом окне
            Когда вы находитесь в меню или в диалоговом окне,  в  строке
       состояния кратко описано,  что делает текущий элемент.  Например,
       если подсвечена команда  View¦Registers  (Обзор¦Регистры),  то  в

в локальном или глобальном  меню,


       строке состояния говорится: Open a CPU registers window (открыва-
       ет окно регистров ЦП).
            Когда вы находитесь в локальном или глобальном  меню, строка
       состояния дает вам справочную информацию по меню.

       TDeb 3.0 #1-3                = 67 =
                          Глава 3. Небольшой пример
       -----------------------------------------------------------------
            Если вам  не терпится использовать Турбо отладчик,  но вы не
       относитесь к разряду тех людей,  которые перед этим подробно изу-
       чат сначала все руководство,  то в данной главе вы найдете доста-
       точно информации для отладки своей  первой  программы.  Когда  вы
       изучите описанные здесь основные принципы, интегрированный интер-
       фейс с пользователем и контекстную справочную систему, это позво-
       лит вам продолжить обучение самостоятельно.
            В данной  главе  описываются все основные средства Турбо от-
       ладчика. После изучения примеров программ (одна из которых реали-
       зована на языке Си, а другая - на Паскале), тексты которых имеют-
       ся  на  дистрибутивном  диске,  вы  увидите,  как  можно   делать
       следующее:
            - запускать и останавливать программу;
            - проверять содержимое переменных программы;
            - просматривать сложные объекты данных, такие, как массивы и
              структуры;
            - изменять значение переменных.
                              Примеры программ
       -----------------------------------------------------------------
            Примеры программ (TCDEMO.C на языке Си и TPDEMO.PAS на  Пас-
       кале) служат введением, с помощью которого вы сможете изучить две
       основные вещи,  необходимые при отладке программ: как запускать и
       останавливать программу,  и как анализировать переменные и струк-
       туры данных  программы.  Сами  программы  не  представляют  собой
       что-то  действительно  полезное,  некоторые  их части и структуры

данных присутствуют исключительно ради  демонстрации


       данных присутствуют исключительно ради  демонстрации возможностей
       Турбо отладчика.
            Демонстрационные программы позволяют  вам  ввести  несколько
       строк текста, а затем подсчитать число введенных букв и цифр. При
       завершении работы каждая из программ выводит некоторую статистику
       по  тексту,  включая  среднее число строк на строке и частоту ис-
       пользования каждой буквы.
            Убедитесь, что ваш текущий каталог содержит два файла, необ-
       ходимых для демонстрации работы данных программ. Для языка Си вам
       понадобятся файлы TCDEMO.C и TCDEMO.EXE, а для примера на Паскале
       необходимы файлы TPDEMO.PAS и TPDEMO.EXE (они содержатся на дист-
       рибутивных дискетах).
                               Запуск программы
            Для запуска программы на языке Си введите:

       TDeb 3.0 #1-3                = 68 =
               TC TCDEMO
            Для запуска программы на Паскале введите команду:
               TD TPDEMO
            Турбо отладчик  загружает демонстрационную программу и пози-
       ционирует курсор на начале программы.
       ----------------------------------------------------------------¬
       ¦Ё  File Edit View Run Breakpoint Data Option Window Help  READY¦
       ¦г=[*]=Module: TCDEMO  file: TCDEMO.C 32===============1=[ ][ ]¬¦
       ¦¦                                                             ^¦
       ¦¦static word showargs(int argc, char *argv[]_;                -¦
       ¦¦                                                             -¦
       ¦¦/* точка входа программы */                                  -¦
       ¦¦>int main(int argc, char **argv) {                           -¦
       ¦¦          unsigned int nlines, nwords, wordcount;            -¦
       ¦¦          unsigned long totalcharacters;                     -¦
       ¦¦                                                             -¦
       ¦¦          nlines  =  0;                                      -¦

Начальный экран при работе


       ¦¦          nwords  =  0;                                      -¦
       ¦¦          totalcharacters = 0;                               -¦
       ¦¦          showargs(argc,argv);                               -¦
       ¦¦          while (readaline() != 0) {                         -¦
       ¦¦                 wordcount = makeintwords(buffer);           -¦
       ¦¦                 nwords += wordcount;                        -¦
       ¦¦                 totalcharacters += analyzewords(buffer);    -¦
       ¦¦                 nlines++;                                   -¦
       ¦¦          }                                                  v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3. 1 Начальный экран при работе с программой на языке Си
       TCDEMO
            Оперативные клавиши:  F1=Help - cправка; F2=Bkpt - точка ос-
       танова; F3=Close - закрыть; F4=Here - здесь; F5=Zoom - переключе-
       ние  окон;  F6=Next - дальше;  F7=Trace - трассировка;  F8=Step -
       шаг; F9=Run - выполнить; F10=Menu - меню.
            Основное меню (верхняя строка):  Ё - системное меню;  File -
       файл; Edit  -  редактирование  View  -  обзор;  Run - выполнение;
       Breakpoints - точки останова; Data - данные; Options - параметры;
       Window - окно; Help - справка.
            Данный экран состоит из основной строки  меню,  окон  Module
       (Модуль) и Watches (Просмотр) и справочной строки.

       TDeb 3.0 #1-3                = 69 =
                               Завершение работы
            Чтобы выйти из отладчика в любой момент и вернуться в опера-

лит вам перезагрузить  программу  и 


       ционную среду DOS,  нажмите клавиши Alt-X. Если при работе с при-
       мером вы безнадежно "заблудились",  нажатие клавиш Ctrl-F2 позво-
       лит вам перезагрузить  программу  и  начать  выполнение  сначала.
       Однако  при  нажатии данных клавиш не сбрасываются точки останова
       или просматриваемые величины. Чтобы сделать это, нужно воспользо-
       ваться клавишами Alt-F O (клавиши Alt-B D также позволяют удалить
       все точки останова, но иногда быстрее  перезагрузиться  с помощью ї
       Alt-F O).
                              Получение подсказки
            Когда вам  понадобиться получить справочную информацию о те-
       кущем окне, для этого нажмите клавишу F1. Вы можете получить раз-
       нообразную  информацию (на английском языке),  проходя по системе
       меню и нажимая клавишу F1 (будет выводиться краткий перечень  то-
       го, что делает каждая команда).

       TDeb 3.0 #1-3                = 70 =
                        Использование Турбо отладчика
       -----------------------------------------------------------------
            Далее следует описание по использованию отладчика.
                                    Меню
       -----------------------------------------------------------------
            В верхней части экрана показана строка меню. Для вывода меню
       с помощью данной строки, нажмите клавишу F10, используйте клавиши
       стрелок для выбора пункта меню, и нажмите клавишу Enter, или наж-
       мите клавишу Alt в сочетании с первой буквой  одного  из  пунктов
       меню.
       -----------------------------------------------------------------
        Ё  File Edit View Run Breakpoint Data Option Window Help  READY
       -----------------------------------------------------------------
            Рис. 3.2 Строка меню
            Нажмите клавишу F10.  Обратите внимание, что при этом курсор
       исчезает  из окна Module,  а команда (Ё) главного меню становится

Нижняя строка экрана также изменяется,


       выделенной. Нижняя строка экрана также изменяется, показывая, ка-
       кие команды содержит системное меню (Ё).
            Для перемещения в системе меню используйте  клавиши стрелок.
       При нажатии "стрелки вниз" раскроется меню для подсвеченного эле-
       мента.
            Если у вас есть "мышь" то с ее помощью также можно открывать
       меню, установив указатель на соответствующий элемент меню (коман-
       ду) и нажав кнопку "мыши".
            Чтобы возвратиться на предыдущий уровень системы меню,  наж-
       мите клавишу Esc.  Когда в главном меню подсвечен один из элемен-
       тов меню,  то нажатие клавиши Esc возвращает вас в окно Module, а
       главное меню становится неактивным.
                              Строка состояния
       -----------------------------------------------------------------
            В нижней строке экрана показаны соответствующие функциональ-
       ные клавиши  и  выполняемые  ими функции.
       --------------------------------- ...
       F1=Help F2=Bkpt F3=Close F4=Here
       --------------------------------- ...
            ... ------------------------------------------------
                F5=Zoom F6=Next F7=Trace F8=Step F9=Run F10=Menu
            ... ------------------------------------------------
            Рис. 3.3 Строка состояния

       TDeb 3.0 #1-3                = 71 =
            Эта строка (справочная строка или строка состояния)  изменя-
       ется в зависимости от того,  что вы вводите (команды меню,  ответ
       на подсказку и т.д.). Например, нажмите клавишу Alt и удерживайте
       ее в таком состоянии одну или две секунды. Обратите внимание, что
       нижняя строка изменилась,  и в ней показаны функциональные клави-
       ши, которые вы можете использовать совместно с клавишей Alt.
            Теперь нажмите таким же образом клавишу Ctrl. Команды, пока-
       занные в нижней строке экрана,  представляют собой сокращения ко-

меню для текущей области окна.


       манд  локальных  меню для текущей области окна.  Они изменяются в
       зависимости от того,  в каком окне и в какой области  окна  вы  в
       данный момент находитесь. Далее мы расскажем об этом подробнее.
            Когда вы входите в систему меню,  строка состояния снова из-
       меняется и отражает функции подсвеченного в данный момент элемен-
       та меню.  Для  перехода в строку меню нажмите клавишу F10,  затем
       стрелку вправо для выбора пункта File (Файл).  В строке состояния
       теперь говориться: "File oriented functions" (функции, ориентиро-
       ванные на работу с файлами). Для просмотра возможностей меню File
       используйте клавишу "стрелка вниз".  Затем нажмите клавишу Esc или
       выберите с помощью "мыши" окно Module, чтобы выйти из системы ме-
       ню.

       TDeb 3.0 #1-3                = 72 =
                                    Окна
       -----------------------------------------------------------------
            Область окон занимает большую часть экрана. В окнах вы може-
       те просматривать части программы (наблюдая их в различных окнах и
       областях).
            Работа начинается с вывода двух окон: окна Module (Модуль) и
       окна  Watches  (Просмотр). Пока вы не откроете другие окна или не
       измените (настроите) данные,  эти окна будут полными. Это означа-
       ют, что они заполняют весь экран без перекрытия. Новые окна авто-
       матически перекрывают существующие, пока вы по ним перемещаетесь.
       ----------------------------------------------------------------¬
       ¦Ё Edit File View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TCDEMO  file: TCDEMO.C 3 ===============1=[ ][ ]¬¦
       ¦¦ program DoNuthin;                                           ^¦
       ¦¦                                                             -¦
       ¦¦> begin                                                      -¦

что окно Module имеет двойную


       ¦¦  end.                                                       -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦          Это окно Module                                    -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦           Это окно Watches                                  ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3.4 Неперекрывающиеся окна Module и Watches
            Оперативные клавиши:  F1=Help - cправка; F2=Bkpt - точка ос-
       танова; F3=Close - закрыть; F4=Here - здесь; F5=Zoom - переключе-
       ние  окон;  F6=Next - дальше;  F7=Trace - трассировка;  F8=Step -
       шаг; F9=Run - выполнить; F10=Menu - меню.
            Основное меню (верхняя строка):  Ё - системное меню;  File -
       файл; View - обзор; Run - выполнение; Breakpoints - точки остано-
       ва; Data - данные;  Options - параметры;  Window - окно;  Help  -
       справка.
            Заметим, что окно Module имеет двойную рамку  и подсвеченный
       заголовок.  Это означает,  что данное окно является активным.

в текущем окне вы можете


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

       TDeb 3.0 #1-3                = 73 =
       ления курсором,  а также клавиши Home, End, PgUp и т.д.). Для пе-
       рехода в другое окно нажмите клавишу F6. При этом активным стано-
       вится  окно Watches (оно будет иметь двойную рамку и подсвеченный
       заголовок).
            Для создания  новых окон используйте команду меню View¦Stack
       (Обзор¦Стек). При выборе данной команды на окно Module накладыва-
       ется окно Stack (Стек).
            Для удаления текущего окна нажмите клавиши Alt-F3.  Если  вы
       сделаете это сейчас, то окно Stack исчезнет.
            Турбо отладчик запоминает последние закрытые  окна,  поэтому
       при  необходимости  вы  можете их восстановить.  Если вы случайно
       закрыли окно,  нажмите клавиши Alt-W, чтобы перейти в меню Window
       (Окно).  Нажмите U для выбора команды Undo Close (Отменить закры-
       тие) или  используйте  команду меню Window¦Undo Close (Окно¦Отме-
       нить закрытие). При этом вновь появится окно Stack. Чтобы восста-
       новить  последнее  закрытое окно,  вы можете также нажать клавиши
       Alt-F6.
            Меню Window  (Окно) содержит команды,  которые позволяют вам
       настраивать окна,  уже имеющиеся на экране. Вы можете как переме-
       щать окно по экрану,  так и изменять его размер. (Для этого можно
       также использовать клавишу Ctrl-F5).
            Для позиционирования текущего окна используйте команду  меню
       Window¦Size/Move (Окно¦Размер/Перемещение),   затем   используйте
       клавиши стрелок для позиционирования текущего окна (в данном слу-
       чае  окна  Staсk)  на экране.  Для настройки размера окна нажмите
       клавишу Shift и (удерживая клавишу Shift в нажатом положении) од-
       ну  из клавиш стрелок.  Когда вы выберете нужную позицию и размер
       окна, нажмите клавишу Enter.
            Теперь для подготовки  к  следующему  разделу  удалите  окно

зили вы программу на языке


       Stack (Стек), нажав клавишу Alt-F3. В зависимости от того, загру-
       зили вы программу на языке Паскаль или на языке Си,  вам  следуют
       перейти к разделу,  относящемуся к программе на Паскале,  или пе-
       рейти к следующему разделу,  где описывается работа с  программой
       на языке Си.
                 Использование примера программы на языке Си
       -----------------------------------------------------------------
            Закрашенная стрелка  (>) в левом столбце окна Module показы-
       вает,  где Турбо отладчик остановил выполнение  вашей  программы.
       Если вы еще не запускали свою программу,  стрелка находится на ее
       первой строке.  Для трассировки одной исходной  строки  программы
       нажмите  клавишу  F7.  Стрелка  и курсор переместятся при этом на
       следующую выполняемую строку.
            Посмотрите на правую границу заголовка окна Module (Модуль).
       В  ней показана строка,  в которой находится курсор.  Переместите

       TDeb 3.0 #1-3                = 74 =
       курсор с помощью клавиш управления  курсором  (стрелки)  вверх  и
       вниз  и обратите внимание на изменение номера строки в заголовке.
                 Примечание: Чтобы  позиционировать  курсор  на строку в
            окне Module,  нажмите клавиши Ctrl-G, введите номер строки и
            нажмите Enter.
            Как можно видеть,  войдя в меню Run (Выполнение), существует
       несколько способов  запуска программы на выполнение. Предположим,
       к примеру, что вы хотите выполнить программу до строки 39.
            Чтобы запустить программу на выполнение, пока она не достиг-
       нет строки 39,  переместите курсор на эту строку, а затем нажмите
       клавишу F4.  Теперь, когда курсор находится на строке 39, нажмите
       клавишу  F7 для выполнения еще одной строки исходного кода.  Пос-
       кольку выполняемая вами строка представляет  собой  вызов  другой
       функции, то стрелка теперь позиционируется на первой строке функ-

ции showargs. Курсор немедленно переходит


       ции showargs. Курсор немедленно переходит к строке 151, где нахо-
       дится определение showargs.
            Продолжайте нажимать клавишу F7,  пока вы не выполните функ-
       цию  showargs  и  не  вернетесь  на строку,  следующую за вызовом
       (строка 40).  Вместо этого можно нажать клавиши Alt-F8.  При этом
       программа остановится, когда текущая функция возвратит управление
       (вы также перейдете на строку 40).  Эту команду полезно использо-
       вать, когда вы не хотите медленно проходить по шагам всю функцию.

       TDeb 3.0 #1-3                = 75 =
            Если на  строке  39 вместо клавиши F7 вы нажмете клавишу F8,
       то  вместо перехода в функцию вы перейдете  сразу  к  строке  40.
       Клавиша F8 аналогична клавише F7,  которая выполняет функцию,  но
       она не выполняет по шагам код функции.
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TCDEMO  file: TCDEMO.C 32===============1=[ ][ ]¬¦
       ¦¦           unsigned int nlines, nwords, wordcount;           ^¦
       ¦¦           unsigned long totalcharacters;                    -¦
       ¦¦                                                             -¦
       ¦¦           nlines  =  0;                                     -¦
       ¦¦           nwords  =  0;                                     -¦
       ¦¦           totalcharacters = 0;                              -¦
       ¦¦           showargs(argc,argv);                              -¦
       ¦¦>          while (readaline() != 0) {                        -¦
       ¦¦                  wordcount = makeintwords(buffer);          -¦
       ¦¦                  nwords += wordcount;                       -¦
       ¦¦                  totalcharacters += analyzewords(buffer);   -¦
       ¦¦                  nlines++;                                  -¦
       ¦¦           }                                                 -¦

Программа остановилась после  возврата 


       ¦¦           printstatistics(nlines, nwords, totalcharacters); -¦
       ¦¦           return(0);                                        -¦
       ¦¦    }                                                        -¦
       ¦¦    ¦* Чтобы превратить буфер в список завершающихся нулем   -¦
       ¦¦       слов, удалить пустое место                            v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3. 5 Программа остановилась после  возврата  из  функции
       showargs
            Чтобы выполнить программу до тех пор,  пока не будет достиг-
       нуто  заданное  место,  вы можете непосредственно указать функцию
       или номер строки,  не перемещая на данную строку курсор,  а затем
       выполнить программу до этой точки. Чтобы задать метку, до которой
       вы хотите выполнить программу,  нажмите клавиши Alt-F9. Выведется
       диалоговое окно. Введите readaline и нажмите клавишу Enter. Прог-
       рамма начнет выполнение и остановится в начале  функции readaline
       (строка 142).

       TDeb 3.0 #1-3                = 76 =
           Задание точек останова в примере программы на языке Си
       -----------------------------------------------------------------
            Другой способ управлять остановкой программы состоит  в  ис-
       пользовании точек останова.  Простейший способ задать точки оста-
       нова заключается в использовании клавиши F2.  Переместите  курсор
       на строку 44 и нажмите клавишу F2.  Турбо  отладчик  подсвечивает
       строку, показывая, что на ней установлена точка останова.
            Для переключения (установки и отмены) точек останова в прог-

в первых двух позициях окна


       рамме можно также использовать "мышь".  Для этого  надо  щелкнуть
       кнопкой "мыши",  находясь в первых двух позициях окна Module (Мо-
       дуль).
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TCDEMO  file: TCDEMO.C 44===============1=[ ][ ]¬¦
       ¦¦           unsigned int nlines, nwords, wordcount;           ^¦
       ¦¦           unsigned long totalcharacters;                    -¦
       ¦¦                                                             -¦
       ¦¦           nlines  =  0;                                     -¦
       ¦¦           nwords  =  0;                                     -¦
       ¦¦           totalcharacters = 0;                              -¦
       ¦¦           showargs(argc,argv);                              -¦
       ¦¦           while (readaline() != 0) {                        -¦
       ¦¦                  wordcount = makeintwords(buffer);          -¦
       ¦¦                  nwords += wordcount;                       -¦
       ¦¦                  totalcharacters += analyzewords(buffer);   -¦
       ¦¦>                 nlines++;                                  -¦
       ¦¦           }                                                 -¦
       ¦¦           printstatistics(nlines, nwords, totalcharacters); -¦
       ¦¦           return(0);                                        -¦
       ¦¦    }                                                        -¦
       ¦¦    /* Чтобы превратить буфер в список завершающихся нулем   -¦
       ¦¦       слов, удалить пустое место                            v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦

Точка останова на строке


       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3. 6 Точка останова на строке 44
            Оперативные клавиши:  F1=Help - cправка; F2=Bkpt - точка ос-
       танова; F3=Close - закрыть; F4=Here - здесь; F5=Zoom - переключе-
       ние  окон;  F6=Next - дальше;  F7=Trace - трассировка;  F8=Step -
       шаг; F9=Run - выполнить; F10=Menu - меню.
            Теперь нажмите клавишу F9 для выполнения вашей программы без
       прерывания. Экран переключается в режим экрана программы. Демонс-
       трационная программа при этом работает и ждет,  пока  вы  введете
       строку текста. Наберите символы abc, пробел, der и нажмите клави-

       TDeb 3.0 #1-3                = 77 =
       шу Enter.  На дисплее вновь появится  экран  Турбо  отладчика,  а
       стрелка будет позиционирована на строке 44 (Рис.  3.6), где уста-
       новлена  точка останова,  и прекратила свое выполнение программа.
       Теперь нажмите клавишу F2, чтобы "выключить" (отменить) точку ос-
       танова.
            Полное описание точек останова,  включая условные и глобаль-
       ные точки останова, содержится в Главе 7.

       TDeb 3.0 #1-3                = 78 =
                         Использование окна Watches
       -----------------------------------------------------------------
            В окне Watches (Просмотр) в нижней части экрана показываются
       значения заданных вами переменных. Например, чтобы увидеть значе-
       ние переменной nwords,  переместите курсор на имя  переменной  на
       строке 42  и выберите команду Watch (Просмотр) из локального меню
       окна Module.  Можно использовать также сокращение  этой  команды.
       Для этого нажмите клавиши Alt-F10 для выбора сокращенного вариан-
       та,  затем нажмите клавиши Ctrl-W (строка состояния).  Это сокра-
       щенный вариант команды локального меню Alt-F10 W.

Ё File Edit View Run


            Если у вас есть "мышь", то переместитесь на Ctrl-Win в стро-
       ке состояния и нажмите кнопку "мыши".
       ----------------------------------------------------------------¬
       ¦ Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TCDEMO  file: TCDEMO.C 32===============1=[ ][ ]¬¦
       ¦¦            nwords  =  0;                                    ^¦
       ¦¦            totalcharacters = 0;                             -¦
       ¦¦            showargs(argc,argv);                             -¦
       ¦¦            while (readaline() != 0) {                       -¦
       ¦¦                   wordcount = makeintwords(buffer);         -¦
       ¦¦                   nwords += wordcount;                      -¦
       ¦¦                   totalcharacters += analyzewords(buffer);  -¦
       ¦¦>                  nlines++;                                 -¦
       ¦¦            }                                                -¦
       ¦¦            printstatistics(nlines, nwords, totalcharacters);-¦
       ¦¦            return(0);                                       -¦
       ¦¦     }                                                       -¦
       ¦¦     ¦* Чтобы превратить буфер в список завершающихся нулем  -¦
       ¦¦        слов, удалить пустое место                           -¦
       ¦¦      *¦                                                     -¦
       ¦¦     static int makeintwords(char *bufp) {                   -¦
       ¦¦             unsigned int nwords;                            -¦
       ¦¦       слов, удалить пустое место                            v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦nwords                  unsigned int 0 (Ox2)                 ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦

где указаны также ее тип


       L----------------------------------------------------------------
            Рис. 3.7 Переменная в окне Watches
            Переменная nword  появилась теперь в окне Watches (Просмотр)
       в нижней части экрана,  где указаны также ее тип (unsigned int) и
       значение.  По  мере  выполнения программы Турбо отладчик изменяет
       это значение и отражает текущее значение переменной.

       TDeb 3.0 #1-3                = 79 =
            Анализ простых объектов данных программы на языке Си
       -----------------------------------------------------------------
            Когда вы останавливаете выполнение своей программы,  сущест-
       вует много способов просмотра данных с  помощью  команды  Inspect
       (Проверка). Это очень мощное средство позволяет вам анализировать
       структуры данных таким же образом,  как если бы вы визуально наб-
       людали их при разработке программы.
            Команды Inspect  (в  различных локальных меню и в меню Data)
       позволяют вам наблюдать за любой заданной  переменной.  Предполо-
       жим, вы хотите взглянуть на значение переменной nlines.Перемести-
       те курсор таким образом, чтобы он оказался под одной из букв име-
       ни nlines,  и выберите команду Inspect (Проверка) локального меню
       окна Module (Модуль),  для чего нажмите клавиши Ctrl-I.  При этом
       будет выведено окно Inspector (Проверка).
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦--[*]-Module: TCDEMO  file: TCDEMO.C 44-----------------------¬¦
       ¦¦            nwords  =  0;                                    ¦¦
       ¦¦            totalcharacters = 0;                             ¦¦
       ¦¦            showargs(argc,argv);                             ¦¦
       ¦¦>           while (readaline() != 0) {                       ¦¦
       ¦¦                   wordcount = makeintwords(buffer);         ¦¦

всех других  окнах) можно также


       ¦¦                   nwords += wordcount;                      ¦¦
       ¦¦                   гInspecting nlines====3=[ ][ ]¬(buffer);  ¦¦
       ¦¦                   ¦@793E:FFCO                   ¦           ¦¦
       ¦¦            }      ¦unsigned-int-------0-(Ox0)---¦           ¦¦
       ¦¦            printstL=============================-haracters);¦¦
       ¦¦            return(0);                                       ¦¦
       ¦¦     }                                                       ¦¦
       ¦¦     /* Чтобы превратить буфер в список завершающихся нулем  ¦¦
       ¦¦        слов, удалить пустое место                           ¦¦
       ¦¦      */                                                     ¦¦
       ¦¦     static int makeintwords(char *bufp) {                   ¦¦
       ¦¦             unsigned int nwords;                            ¦¦
       ¦¦       слов, удалить пустое место                            ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦nwords                  unsigned int 0 (Ox2)                 ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3.8 Окно Inspector
            В первой строке (заголовке) этого окна вам  сообщается адрес
       данной переменной в памяти.  Третья строка показывает,  какой тип
       данных хранится в переменной nlines (это тип unsigned  int  языка
       Си). Справа указано текущее значение переменной.
            Теперь, проверив  значение этой переменной,  нажмите клавишу

       TDeb 3.0 #1-3                = 80 =
       Esc для того,  чтобы закрыть окно Inspector.  Для этого (как и во
        всех других  окнах) можно также воспользоваться клавишами Alt-F3,
       либо закрыть окно с помощью "мыши".

Нажав клавишу Ctrl, вы выбрали


            Давайте рассмотрим, что вы в действительности здесь сделали.
       Нажав клавишу Ctrl, вы выбрали сокращенный вариант команд локаль-
       ных меню в окне Module.  Нажатие клавиши I задало команду Inspect
       (Проверка).
            Для проверки  элемента  данных,  который  не  виден  в  окне
       Module, выберите команду Data¦Inspect (Данные¦Проверка). Выводит-
       ся рамка  подсказки  (диалоговое окно),  где вы можете ввести имя
       переменной, которую требуется проверить.  Наберите имя letterinfo
       и нажмите клавишу Enter.  Появляется окно проверки, где выводятся
       значения элементов массива letterinfo.  В заголовке окна проверки
       показывается имя проверяемых данных. Первая строка под заголовком
       -  это  адрес  в  оперативной  памяти  первого  элемента  массива
       letterinfo. Для просмотра (с помощью "прокрутки" окна) 26 элемен-
       тов,  входящих в letterinfo, используйте клавиши стрелок (в заго-
       ловке окна проверки выводится имя и тип проверяемых  вами данных,
       которые в точности соответствуют описанию этих данных, содержаще-
       муся в исходном файле). В следующем разделе рассказывается о том,
       как можно проверять такие сложные объекты данных.

       TDeb 3.0 #1-3                = 81 =
            Анализ сложных объектов данных программы на языке Си
       -----------------------------------------------------------------
            Сложные (составные) объекты данных,  такие,  как массивы или
       структуры,  содержат несколько компонентов. Переместитесь на чет-
       вертый элемент массива letterinfo  (элемент,  указанный  индексом
       [3]).  Для  вывода  локального меню для окна Inspector (Проверка)
       нажмите клавиши Alt-F10 и I.  Появляется новое окно  проверки,  в
       котором показывается содержимое элемента  массива.  В  этом  окне
       Inspector показано содержимое структуры типа linfo.
       ----------------------------------------------------------------¬

Ё File Edit View Run


       ¦ Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦--[*]-Module: TCDEMO  file: TCDEMO.C 44-----------------------¬¦
       ¦¦           letterindex = toupper(*bufp) - 'A'; /* index  from¦¦
       ¦¦           if (first) {                                      ¦¦
       ¦¦                  letterinfo[letterindex].firstletter++;     ¦¦
       ¦¦           -Inspecting letterinfo------------3¬              ¦¦
       ¦¦           ¦@793E:0852                        ¦;  /* count   ¦¦
       ¦¦           ¦[0]                         {1,1) ¦              ¦¦
       ¦¦           ¦[1]                         {1,0) ¦              ¦¦
       ¦¦           ¦[2]                         {1,0) ¦              ¦¦
       ¦¦           ¦[3]                         {1,1) ¦              ¦¦
       ¦¦    }      ¦[4]                         {1,0) ¦              ¦¦
       ¦¦    wordcou¦[5]                         {1,0} ¦              ¦¦
       ¦¦    bufp++;+----------------------------------+              ¦¦
       ¦¦           ¦struct linfo                      ¦              ¦¦
       ¦¦  return(chL-----------------------------------              ¦¦
       ¦¦> }         г=Inspecting Letterinfo[3]==4=[ ][ ]¬            ¦¦
       ¦¦            ¦@793E:085E                         ¦            ¦¦
       ¦¦  /* вывести¦count                    1 (Ox1)   ¦            ¦¦
       ¦¦     всю ста¦firstletter              1 (Ox1)   ¦            ¦¦
       ¦¦            ¦<--------------------------------->¦            ¦¦
       ¦¦            ¦struct linfo                       ¦            ¦¦
       ¦L------------L===================================--------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦nwords                  unsigned int 0 (Ox2)                 ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦

Когда вы поместите курсор на


       L----------------------------------------------------------------
            Рис. 3.9 Проверка структуры
            Когда вы поместите курсор на одном из имен элементов  струк-
       туры, тип  данных  этого  элемента появится в нижней области окна
       проверки.  Если один из этих элементов представляет собой, в свою
       очередь,  составной  объект данных,  вы также можете дать команду
       проверку и еще более углубиться в структуру данных.
            Для удаления  окна  Inspector  (Проверка)  и возврата в окно
       Module (Модуль) нажмите  клавиши  Alt-F3.  (Клавиши  Alt-F3  дают
       удобный способ  удаления нескольких окон проверки сразу.  Если вы
       нажмете Esc, то будет удалено только последнее окно проверки.)

       TDeb 3.0 #1-3                = 82 =
              Изменение значений данных в программе на языке Си
       -----------------------------------------------------------------
            Итак, вы  теперь  узнали,  как  можно просматривать данные в
       программе.  Давайте теперь попробуем изменить  значение  элемента
       данных.
            С помощью  клавиш со стрелками перейдите на строку 38 исход-
       ного файла.  Поместите курсор на переменную totalcharacters и для
       проверки ее значения нажмите клавиши Ctrl-I.  После того, как бу-
       дет открыто окно Inspector,  нажмите для вывода  локального  меню
       окна Inspector  клавиши  Alt-F10 и выберите команду Change (Изме-
       нить).  (Это можно сделать также непосредственно,  нажав  клавиши
       Ctrl-C.) Появляется  подсказка  (диалоговое окно),  запрашивающая
       новое значение.
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window HelpPROMPT¦
       ¦--[*]-Module: TCDEMO  file: TCDEMO.C 38-----------------------¬¦
       ¦¦           nlines = 0;                                       ¦¦
       ¦¦           nwords = 0;                                       ¦¦

Enter new value for unsigned


       ¦¦           totalcharacters = 0;                              ¦¦
       ¦¦           г[*]Inspecting totalcharacters==3=[ ][ ]¬         ¦¦
       ¦¦           ¦@788E:FFC6                             ¦         ¦¦
       ¦¦           ¦unsigned-long-----------6L-(Ox60)------¦ffer);   ¦¦
       ¦¦           L<------------------------------------->-         ¦¦
       ¦¦    г[*]= Enter new value for unsigned long totalcharacters==¬¦¦
       ¦¦    ¦ totalcharacters + 4                                   ¦¦¦
       ¦¦    ¦                                                       ¦¦¦
       ¦¦    ¦  OK       Cancel        Help                          ¦¦¦
       ¦¦    L=======================================================-¦¦
       ¦¦  }                                                          ¦¦
       ¦¦  ¦* Превратить буфер в список завершающихся нулевым символо즦
       ¦¦   * строк, которые завершаются двумя нулями, удалив пустое  ¦¦
       ¦¦   * пространство *¦                                         ¦¦
       ¦¦  static int makeintowords(char *bufp) {                     ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦Enter item prompted for in dialog title                        ¦
       L----------------------------------------------------------------
            Рис. 3.10 Подсказка команды Change
            В заголовке диалогового окна вам сообщается: Enter new value
       for unsigned long totalcharacters (введите новое значение для пе-
       ременной totalcharacters типа unsigned long),  а в нижней  строке
       экрана говорится:  Enter item prompted by a dialog title (введите
       элемент данных, указанный в заголовке диалогового окна).
            В данный момент вы можете ввести любое выражение  языка  Си,

перь будет показано новое значение


       при    вычислении    которого    получается    число.    Наберите

       TDeb 3.0 #1-3                = 83 =
       totalcharacters + 4 и нажмите клавишу Enter.  В окне проверки те-
       перь будет показано новое значение - 10L (OxA).
            Для изменения элемента данных,  который не виден  в  текущем
       окне Module (Модуль), выберите команду Data¦Evaluate/Modify (Дан-
       ные¦Вычисление/Модификация). При  этом  будет выведено окно подс-
       казки,  в которой вы можете ввести имя изменяемой переменной. На-
       берите имя argc и нажмите клавишу Enter.  Наберите 123 и  нажмите
       Enter. Результат (во втором окне) изменяется и принимает значение
       int 123 (Ox7B).
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window HelpPROMPT¦
       ¦--[*]-Module: TCDEMO  file: TCDEMO.C 38-----------------------¬¦
       ¦¦ static void showargs(int argc, char *argv[]);               ¦¦
       ¦¦                                                             ¦¦
       ¦¦ /* program eг[*]==============Evaluate/Modify===========¬   ¦¦
       ¦¦         unsi¦Expression                      ¦   Eval   ¦   ¦¦
       ¦¦         unsi¦ argc                           ¦  ------- ¦   ¦¦
       ¦¦             ¦--------------------------------¦-- Cancel ¦   ¦¦
       ¦¦         nlin¦Result                          ¦  ------- ¦   ¦¦
       ¦¦         nwor¦int 123 (Ox7B)                  ¦   Help   ¦   ¦¦
       ¦¦         tota¦-------------------------------^¦--------- ¦   ¦¦
       ¦¦         show¦New value                      -¦  Modify  ¦   ¦¦
       ¦¦         whil¦ 123                           v¦  ------- ¦   ¦¦
       ¦¦>            L===========================================-   ¦¦
       ¦¦  }                                                          ¦¦
       ¦¦  /* Превратить буфер в список завершающихся нулевым символо즦
       ¦¦   * строк, которые завершаются двумя нулями, удалив пустое  ¦¦

вое значение; Enter new value


       ¦¦   * пространство */                                         ¦¦
       ¦¦  static int makeintowords(char *bufp) {                     ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦Enter new value                                                ¦
       L----------------------------------------------------------------
            Рис. 3.11 Диалоговое окно Evaluate/Modify
            Expression - выражение;  Result - результат; New value - но-
       вое значение; Enter new value - введите новое значение.
            Это было краткое введение по использованию  Турбо  отладчика
       для работы с программой на языке Си. Более подробно об этом расс-
       казывается в описании примера сеанса отладки в Главе 14,  где ис-
       пользуется версия данной программы с намеренно введенной ошибкой.
                 Использование примера программы на Паскале
       -----------------------------------------------------------------
            Закрашенная стрелка в левом столбце окна Module (Модуль) по-
       казывает,  где Турбо отладчик остановил выполнение вашей програм-

       TDeb 3.0 #1-3                = 84 =
       мы. Так как вы еще не запускали свою программу, стрелка находится
       на ее первой строке. Для трассировки одной исходной строки нажми-
       те клавишу F7.  Стрелка и курсор переместятся при этом на следую-
       щую строку.
            Посмотрите на правую границу заголовка окна Module (Модуль).
       В ней показана строка,  в которой находится  курсор.  Переместите
       курсор  с помощью клавиш управления курсором  (стрелки)  вверх  и
       вниз и обратите внимание на изменение номера строки в заголовке.
            Чтобы запустить программу на выполнение, пока она не достиг-

нет строки 221, переместите курсор


       нет строки 221, переместите курсор на эту строку, а затем нажмите
       клавишу F4.  Программа TPDEMO выведет  вам  подсказку  для  ввода
       строки. Наберите несколько символов (ABC,  пробел, DEF) и нажмите
       клавишу Enter.  Теперь, если курсор находится на строке 221, наж-
       мите дважды клавишу F7 для выполнения еще  двух  строк  исходного
       кода.  Поскольку выполняемая вами строка представляет собой вызов
       другой процедуры (функции),  то стрелка теперь позиционируется на
       первой строке функции ProcessLine.  Если вы будете продолжать на-
       жимать клавишу F7, то будет выполняться функция ProcessLine, пока
       управление не  вернется  на  следующую  за вызовом строку (строка
       224). Вместо этого можно нажать клавиши Alt-F8. При этом програм-
       ма остановится,  когда  текущая функция ProcessLine возвратит уп-
       равление.  Эту команду полезно использовать,  когда вы не  хотите
       медленно проходить по шагам всю функцию или процедуру.

       TDeb 3.0 #1-3                = 85 =
            Если на  строке 221 вы вместо клавиши F7 нажмете оперативную
       клавишу F8,  то вместо перехода в функцию курсор переместится  на
       строку 224. Клавиша F8 аналогична клавише F7: она также выполняет
       функции, но не переводит вас в исходный код функции.
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TPDEMO  file: TPDEMO.PAS 224============1=[ ][ ]¬¦
       ¦¦     while buffer <> '' do                                   ^¦
       ¦¦     begin                                                   -¦
       ¦¦         ProcessLine(Buffer);                                -¦
       ¦¦>        Buffer := GetLine;                                  -¦
       ¦¦     end;                                                    -¦
       ¦¦     ShowResults;                                            -¦

Программа остановилась после возврата


       ¦¦     ParmsOnHeap;                                            -¦
       ¦¦   end.                                                      -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             -¦
       ¦¦                                                             v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3. 12 Программа остановилась после возврата из процеду-
       ры
            Чтобы выполнить программу до тех пор,  пока не будет достиг-
       нуто  заданное  место,  вы можете непосредственно указать функцию
       или номер строки,  не перемещая курсор на данную строку курсор, а
       затем выполнить программу до этой точки.  Чтобы задать метку,  до
       которой вы хотите выполнить программу,  нажмите  клавиши  Alt-F9.
       Программа  начнет  выполнение  и  остановится  в  начале  функции
       GetLine.

       TDeb 3.0 #1-3                = 86 =
         Задание точек останова в примере программы на языке Паскаль
       -----------------------------------------------------------------

Другой способ управлять остановкой программы


            Другой способ управлять остановкой программы состоит  в  ис-
       пользовании точек останова.  Простейший способ задать точки оста-
       нова заключается в использовании клавиши F2.  Переместите  курсор
       на  строку 121 и нажмите F2.  Турбо отладчик подсвечивает строку,
       показывая, что на ней установлена точка останова.
            Точки останова  можно  устанавливать  и отменять также с по-
       мощью "мыши".  Для этого нужно переместиться на первую или вторую
       позицию окна Module и нажать кнопку "мыши".
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TPDEMO  file: TPDEMO.PAS 121============1=[ ][ ]¬¦
       ¦¦    i  :  integer;                                           ^¦
       ¦¦    WordLen : Word;                                          -¦
       ¦¦                                                             -¦
       ¦¦  begin { ProcessLine }                                      -¦
       ¦¦>   Inc(NumLines);                                           -¦
       ¦¦    i := 1;                                                  -¦
       ¦¦    while i <= Length(S) do                                  -¦
       ¦¦    begin                                                    -¦
       ¦¦      { Пропустить не буквы }                                -¦
       ¦¦      while (i <= Length(S)) and not IsLetter(S[i]) do       -¦
       ¦¦       Inc(i);                                               -¦
       ¦¦                                                             -¦
       ¦¦      { Найти конец слова, обработать счетчики букв и слов } -¦
       ¦¦      WordLen := 0;                                          -¦
       ¦¦      while (i <= Length(S)) and IsLetter(S[i]) do           -¦
       ¦¦      begin                                                  -¦
       ¦¦        Inc(NumLetters);                                     -¦

Точка останова на строке


       ¦¦        Inc(LetterTable[UpCase(S[i])].Count);                v¦
       ¦L<----------------------------------------------------------->¬¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦                                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3. 13 Точка останова на строке 121
            Теперь нажмите клавишу F9 для выполнения вашей программы без
       прерывания. Экран переключается в режим экрана программы. Демонс-
       трационная  программа  при этом работает и ждет,  пока вы введете
       строку текста. Наберите abc, пробел, def и нажмите клавишу Enter.
       На дисплее появится экран Турбо отладчика,  а стрелка будет пози-
       ционирована на строке 121, где установлена точка останова и прек-
       ратила свое выполнение программа.
            Полное описание точек останова,  включая условные и глобаль-
       ные точки останова, содержится в Главе 7.

       TDeb 3.0 #1-3                = 87 =
                         Использование окна Watches
       -----------------------------------------------------------------
            В окне Watches (Просмотр) в нижней части экрана показываются
       значения заданных вами переменных. Например, чтобы увидеть значе-
       ние переменной NumWords,  переместите курсор на имя переменной на
       строке 144  и  выберите  команду Watch (Просмотр) локального меню
       окна Module. Можно также использовать сокращенный вариант -  кла-
       виши Alt-F10 и клавиши Ctrl-W (строка состояния). Это сокращенный
       вариант команды локального меню.
            Кроме того можно позиционироваться на Ctrl-Win в строке сос-
       тояния и нажать правую кнопку "мыши".
       ----------------------------------------------------------------¬

Ё File Edit View Run


       ¦ Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦г=[*]=Module: TPDEMO  file: TPDEMO.PAS 121============1=[ ][ ]¬¦
       ¦¦         IncLetterTable(UpCase(S[i])].Count;                 ^¦
       ¦¦         if WordLen = 0 then                                 -¦
       ¦¦           Inc(LetterTable[UpCase(S[i])].FirstLetter;        -¦
       ¦¦           Inc(WordLen);                                     -¦
       ¦¦       end;                                                  -¦
       ¦¦                                                             -¦
       ¦¦       { Обработать счетчик слов }                           -¦
       ¦¦       if WordLen > 0 then                                   -¦
       ¦¦       begin                                                 -¦
       ¦¦         Inc(NumWords);                                      -¦
       ¦¦         if WordLen <= MaxWordLen then                       -¦
       ¦¦           Inc(WordLenTable[WordLen]);                       -¦
       ¦¦       end;                                                  -¦
       ¦¦     end; { while }                                          -¦
       ¦¦  end; { ProcessLine }                                       -¦
       ¦¦                                                             -¦
       ¦¦  function GetLine : BufferStr;                              -¦
       ¦¦        Inc(LetterTable[UpCase(S[i])].Count);                v¦
       ¦L<----------------------------------------------------------->-¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦NumWords                2 ($2) : WORD                        ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3.14 Переменная Паскаля в окне Watches
            Переменная NumWords появилась теперь в окне  Watches  (Прос-

где указаны также ее тип


       мотр)  в  нижней части экрана,  где указаны также ее тип (word) и
       значение.  По мере выполнения программы Турбо  отладчик  изменяет
       это значение и отражает текущее значение переменной.

       TDeb 3.0 #1-3                = 88 =
          Анализ простых объектов данных программы на языке Паскаль
       -----------------------------------------------------------------
            Когда вы останавливаете выполнение своей программы,  сущест-
       вует  много  способов  просмотра данных с помощью команды Inspect
       (Проверка). Это очень мощное средство позволяет вам анализировать
       структуры данных таким же образом,  как если бы вы визуально наб-
       людали их при разработке программы.
            Команды Inspect (в различных локальных меню и в  меню данных
       Data) позволяют вам наблюдать за любой заданной переменной. Пред-
       положим, вы хотите взглянуть на значение переменной NumLines. Пе-
       реместите  курсор  обратно на строку 121 таким образом,  чтобы он
       оказался под одной из букв имени nlines и нажмите клавиши Ctrl-I.
       При этом будет выведено окно Inspector (Проверка).
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦--[*]-Module: TPDEMO  file: TPDEMO.PAS 121--------------------¬¦
       ¦¦    i  :  integer;                                           ¦¦
       ¦¦    WordLen : Word;                                          ¦¦
       ¦¦                                                             ¦¦
       ¦¦  begin { ProcessLine }                                      ¦¦
       ¦¦>   Inc(NumLines);                                           ¦¦
       ¦¦    i := гInspecting NumLines==3=[ ][ ]==¬                   ¦¦
       ¦¦    while¦@77D1:003E                     ¦                   ¦¦
       ¦¦    begin¦WORD---------------------1-($1)¦                   ¦¦
       ¦¦      { ПL===============================-                   ¦¦

Найти конец слова, обработать счетчики


       ¦¦      while (i <= Length(S)) and not IsLetter(S[i]) do       ¦¦
       ¦¦       Inc(i);                                               ¦¦
       ¦¦                                                             ¦¦
       ¦¦      { Найти конец слова, обработать счетчики букв и слов } ¦¦
       ¦¦      WordLen := 0;                                          ¦¦
       ¦¦      while (i <= Length(S)) and IsLetter(S[i]) do           ¦¦
       ¦¦      begin                                                  ¦¦
       ¦¦        Inc(NumLetters);                                     ¦¦
       ¦¦        Inc(LetterTable[UpCase(S[i])].Count);                ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦NumWords                2 ($2) : WORD                        ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3.15 Окно Inspector
            В первой строке окна проверки вам сообщается имя переменной,
       вторая  строка  показывает  ее  показывает  ее адрес в памяти.  В
       третьей строке сообщается, какой тип данных хранится в переменной
       NumLines  (это  тип  Паскаля word),  и выводится текущее значение
       данной переменной.
            Теперь, проверив  значение этой переменной,  нажмите клавишу

       TDeb 3.0 #1-3                = 89 =
       Esc для того,  чтобы закрыть окно проверки Inspector.  Для  этого
       (как и во всех других окнах) можно также воспользоваться клавиша-
       ми ALt-F3 или закрыть его с помощью "мыши".
            Давайте рассмотрим, что вы в действительности здесь сделали.
       Нажав Ctrl,  вы выбрали сокращенный вариант команд локальных меню
       в окне Module. Нажатие I задало команду Inspect (Проверка).

В заголовке окна проверки выводится


            Для проверки  элемента  данных,  который  не  виден  в  окне
       Module, выберите   команду  локального  меню  Data¦Inspect  (Дан-
       ные¦Проверка). Выводится диалоговое окно,  где вы  можете  ввести
       имя переменной,   которую   требуется   проверить.  Наберите  имя
       LetterTable и нажмите клавишу Enter.  Появляется  окно  проверки,
       где  выводится  значение  LetterTable.  Для  просмотра (с помощью
       "прокрутки" окна) 26 элементов,  входящих в LetterTable,  исполь-
       зуйте клавиши стрелок.  В заголовке окна проверки выводится имя и
       тип проверяемых вами данных,  которые  в  точности  соответствуют
       описанию этих данных, содержащемуся в исходном файле. В следующем
       разделе рассказывается о том,  как можно проверять такие  сложные
       объекты данных.

       TDeb 3.0 #1-3                = 90 =
          Анализ сложных объектов данных программы на языке Паскаль
       -----------------------------------------------------------------
            Сложные (составные) объекты данных,  такие,  как массивы или
       структуры,  содержат несколько компонентов. Переместитесь на чет-
       вертый элемент массива LetterTalk  (элемент,  указанный  индексом
       ['D']).  Для вывода локального меню для окна Inspector (Проверка)
       нажмите клавиши Alt-F10 и и выберите команду  Inspect (Проверка).
       Появляется новое окно проверки, в котором показывается содержимое
       этого элемента массива.  В этом окне проверки показано содержимое
       записи LInfoRec.
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window Help READY¦
       ¦--[*]-Module: TPDEMO  file: TPDEMO.PAS 121----------1---------¬¦
       ¦¦    i  :  integer;                                           ¦¦
       ¦¦    WordLen : Word;      -Inspecting LetterTable--3---¬      ¦¦
       ¦¦                         ¦@77D1:005A                  ¦      ¦¦

Когда вы поместите курсор на


       ¦¦  begin { ProcessLine }  ¦['A']                 (1,1) ¦      ¦¦
       ¦¦>   Inc(NumLines);       ¦['B']                 (1,0) ¦      ¦¦
       ¦¦    i := 1;              ¦['C']                 (1,0) ¦      ¦¦
       ¦¦    while i <= Length(S) ¦['D']                 (1,1) ¦      ¦¦
       ¦¦    begin                ¦гInspecting LetterTable['D']=4=¬   ¦¦
       ¦¦      { Пропустить не буꦦ$77D1:0066--------------------¦   ¦¦
       ¦¦      while (i <= Length(¦¦COUNT                  1 ($1) ¦   ¦¦
       ¦¦       Inc(i);           L¦FIRSTLETTER            1 ($1) ¦   ¦¦
       ¦¦                          ¦<---------------------------->¦   ¦¦
       ¦¦      { Найти конец слова,¦LINFOREC                      ¦ } ¦¦
       ¦¦      WordLen := 0;       L==============================-   ¦¦
       ¦¦      while (i <= Length(S)) and IsLetter(S[i]) do           ¦¦
       ¦¦      begin                                                  ¦¦
       ¦¦        Inc(NumLetters);                                     ¦¦
       ¦¦        Inc(LetterTable[UpCase(S[i])].Count);                ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦NumWords                2 ($2) : WORD                        ¦¦
       ¦L--------------------------------------------------------------¦
       ¦F1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.¦
       L----------------------------------------------------------------
            Рис. 3.16 Просмотр записи
            Когда вы поместите курсор на одном из  имен  элементов,  тип
       данных  этого  элемента  появится в нижней области окна проверки.
       Если один из этих элементов представляет собой,  в свою  очередь,
       составной объект данных,  вы также можете дать команду проверки и
       еще более углубиться в структуру данных.
            Для удаления окна Inspector (Проверка)  и  возврата  в  окно

удобный способ удаления нескольких проверок


       Module (Модуль) нажмите  клавиши  Alt-F3.  (Клавиши  ALt-F3  дают
       удобный способ удаления нескольких проверок сразу. Если вы нажме-
       те Esc, то будет удалена только последняя проверка.)

       TDeb 3.0 #1-3                = 91 =
           Изменение значений данныx в программе на языке Паскаль
       -----------------------------------------------------------------
            Итак, вы теперь узнали,  как можно  просматривать  данные  в
       программе.  Давайте  теперь  попробуем изменить значение элемента
       данных.
            С помощью клавиш со стрелками перейдите на строку 103 исход-
       ного файла.  Поместите курсор на переменную NumLetters и для про-
       верки ее значения нажмите клавиши Ctrl-I.  После того,  как будет
       открыто  окно Inspector,  нажмите для вывода локального меню окна
       Inspector клавиши  Alt-F10.  Нажмите клавишу C для выбора команды
       Change (Изменить).  (Это можно сделать также непосредственно, на-
       жав клавиши Ctrl-C.) Появляется подсказка (диалоговое окно), зап-
       рашивающая новое значение.
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window HelpPROMPT¦
       ¦--[*]-Module: TPDEMO  file: TPDEMO.PAS 103--------------1-----¬¦
       ¦¦                                                             ¦¦
       ¦¦  procedure Init;                                            ¦¦
       ¦¦  begin                                                      ¦¦
       ¦¦    NumLines := 0; NumWords := 0; NumLetters := 0;           ¦¦
       ¦¦    FillChar(LetterTable, -=Inspecting NumLetters=3=[ ][ ]¬  ¦¦
       ¦¦    FillChar(WordLenTable,¦$77D1:0042                ¦    ¦  ¦¦
       ¦¦    WriteLn('Введите строк¦LONGINT-------------6-($6)¦    ¦  ¦¦
       ¦¦  end; { Init }           L===============================-  ¦¦
       ¦¦          г[*]=Enter new value for numletters : LONGINT====¬ ¦¦

Enter item prompted for in


       ¦¦  procedur¦ Numletters + 4                                 ¦ ¦¦
       ¦¦          ¦   OK      Cancel      Help                     ¦ ¦¦
       ¦¦  function¦   --      ------      ----                     ¦ ¦¦
       ¦¦  begin   L================================================- ¦¦
       ¦¦    IsLetter := UpCase(ch);                                  ¦¦
       ¦¦  end; { IsLetter }                                          ¦¦
       ¦¦                                                             ¦¦
       ¦¦  var                                                        ¦¦
       ¦¦    i : integer;                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦NumWords                2 ($2) : WORD                        ¦¦
       ¦L--------------------------------------------------------------¦
       ¦ Enter item prompted for in dialog title                        ¦
       L----------------------------------------------------------------
            Рис. 3.17 Диалоговое окно команды Change
            В заголовке диалогового окна вам сообщается: Enter new value
       for unsigned long totalcharacters (введите новое значение для пе-
       ременной totalcharacters типа unsigned long),  а в нижней  строке
       экрана говорится:  Enter item prompted by a dialog title (введите
       элемент данных, указанный в заголовке диалогового окна).
            В данный момент вы можете ввести  любое  выражение  Паскаля,

       TDeb 3.0 #1-3                = 92 =
       при вычислении которого получается число. Наберите NumLetters+4 и
       нажмите клавишу Enter.  В окне проверки теперь будет показано но-
       вое значение 10.
            Для изменение  элемента  данных,  который не виден в текущем
       окне Module, выберите команду Data¦Evaluate/Modify (Данные¦Вычис-
       ление/Модификация) локального меню окна Module (Модуль).

в котором вы можете  ввести 


При этом
       будет выведено диалоговое окно,  в котором вы можете  ввести  имя
       изменяемой  переменной.  Наберите  имя NumLines и нажмите клавишу
       Enter.  Нажмите дважды клавишу Tab,  затем наберите 123 и нажмите
       Enter.

       TDeb 3.0 #1-3                = 93 =
       ----------------------------------------------------------------¬
       ¦Ё File Edit View Run Breakpoints Data Options Window HelpPROMPT¦
       ¦--[*]-Module: TPDEMO  file: TPDEMO.PAS 103--------------1-----¬¦
       ¦¦                                                             ¦¦
       ¦¦  procedure Init;                                            ¦¦
       ¦¦  begin                                                      ¦¦
       ¦¦    NumLinea:г[*]==============Evaluate¦Modify=============¬ ¦¦
       ¦¦    FillChar(¦Expression                      ¦   Eval     ¦ ¦¦
       ¦¦    FillChar(¦ NumLines                       ¦   ------   ¦ ¦¦
       ¦¦    Writeln('¦--------------------------------¦   Cancel   ¦ ¦¦
       ¦¦  end; { Init¦Result                          ¦   ------   ¦ ¦¦
       ¦¦             ¦123 ($7B) : WORD                ¦   Help     ¦ ¦¦
       ¦¦  procedure P¦-------------------------------^¦   ------   ¦ ¦¦
       ¦¦             ¦New value                      -¦   Modify   ¦ ¦¦
       ¦¦  function Is¦ 123                           v¦   ------   ¦ ¦¦
       ¦¦  begin      L=============================================- ¦¦
       ¦¦    IsLetter := UpCase(ch);                                  ¦¦
       ¦¦  end; { IsLetter }                                          ¦¦
       ¦¦                                                             ¦¦
       ¦¦  var                                                        ¦¦
       ¦¦    i : integer;                                             ¦¦
       ¦L--------------------------------------------------------------¦
       ¦-Watches-----------------------------------------------------2¬¦
       ¦¦NumWords                2 ($2) : WORD                        ¦¦

вое значение; Enter new value


       ¦L--------------------------------------------------------------¦
       ¦Enter new value                                                ¦
       L----------------------------------------------------------------
            Рис. 3.18 Диалоговое окно команды Evaluate/Mоdify
            Expression - выражение;  Result - результат; New value - но-
       вое значение; Enter new value - введите новое значение.
            Этим мы  завершаем  краткое  введение по использованию Турбо
       отладчика для работы с программой на языке Паскаль. Более подроб-
       но  об  этом  рассказывается  в описании примера сеанса отладки в
       Главе 14.

       TDeb 3.0 #1-3                = 94 =
                       Глава 4. Запуск Турбо отладчика
       -----------------------------------------------------------------
            В данной главе рассказывается,  как можно подготовить  прог-
       раммы для отладки.  Мы покажем вам, как можно запустить Турбо от-
       ладчик в ответ на командную строку DOS и настроить его  параметры
       таким образом,  чтобы они соответствовали отлаживаемой вами прог-
       рамме.  Мы объясним также,  как можно сохранить эти  параметры  в
       файле конфигурации. Вы узнаете также, как можно из Турбо отладчи-
       ка во время сеанса работы с  ним  запускать  командный  процессор
       DOS, и, наконец, как возвратиться в DOS, когда вы закончили рабо-
       ту.
                       Подготовка программ для отладки
       -----------------------------------------------------------------
            Когда вы выполняете компиляцию и компоновку с помощью одного
       из Турбо языков фирмы Borland,  вам следует указать  компилятору,
       что  нужно  генерировать  полную информацию для отладки.  Если вы
       скомпилируете объектные модули своей программы без информации для
       отладки, вам  придется  перекомпилировать  все эти модули,  чтобы
       можно было полностью использовать все средства отладки  на уровне