ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 1

       TDeb 3.0 #1-3                 = 1 =

     Введение..........................................................8
       Новые свойства и изменения в версии 3.0.........................9
       Требования к аппаратному и программному обеспечению............11
       Замечания по терминологии......................................11
       Содержание данного руководства.................................13
       Как обратиться за помощью к фирме Borland......................16
       Ресурсы вашего пакета..........................................16
       Возможности фирмы Borland......................................16
       Рекомендуемая литература.......................................18
       Турбо отладчик и средства разработки программ..................18
       Книги по Microsoft Windows.....................................18
     Глава 1. Начало работы...........................................19
       Дистрибутивные дискеты.........................................19
       Файл README....................................................19
       Файл HELPME!.TD................................................20
       Файл MANUAL.TD.................................................20
       Утилиты Турбо отладчика........................................20
       Установка Турбо отладчика......................................22
       Установка TDDEBUG.386 для использования c TDW..................22
       Аппаратная отладка.............................................22
       Средства аппаратной отладки DOS................................23
       Аппаратная отладка для прикладных программ Windows.............23
       Что делать дальше?.............................................24
       Программистам, изучающим Турбо языки...........................24
       Программистам, имеющим опыт работы на Турбо языках.............24
     Глава 2. Отладка и Турбо отладчик................................25
       Обнаружение ошибки.............................................25
       Нахождение ошибки..............................................25
       Определение причины ошибки.....................................26
       Исправление ошибки.............................................26
       Что может вам дать Турбо отладчик?.............................26
       Что Турбо отладчик не сможет сделать...........................29
       Как работает Турбо отладчик....................................29
       Достоинства Турбо отладчика....................................29
       Меню и диалоговые окна.........................................30
       Использование главного меню....................................30
       Использование меню.............................................31
       Диалоговые окна................................................33
       Контекстно-зависимая работа....................................34
       Локальные меню.................................................36
       Глобальные меню................................................37
       Локальные меню.................................................37
       Протоколы......................................................38
       Автоматическое дополнение имени................................39
       Расширение по соответствию.....................................39
       Создание макрокоманд...........................................40
       Окна Турбо отладчика...........................................41
       Окна меню View.................................................41
       Окно Module....................................................42
       Окно Wathes....................................................42
       Окно Breakpoints...............................................42
       Окно Stack.....................................................42
       Окно Log.......................................................43

       TDeb 3.0 #1-3                 = 2 =

       Окно Variables.................................................43
       Окно File......................................................43
       Окно CPU.......................................................44
       Окно Dump......................................................44
       Окно Registers.................................................45
       Окно Numeric Processor.........................................45
       Окно Execution History.........................................45
       Окно Hierarchy.................................................46
       Окно сообщений Windows (Windows Messages)......................46
       Окно Clipboard.................................................46
       Окна-дубликаты.................................................48
       Экран пользователя.............................................48
       Окно проверки..................................................48
       Активное окно..................................................50
       Что выводится в окне?..........................................50
       Работа с окнами................................................52
       Переход от одного окна к другому...............................52
       Перемещение окон и изменение их размера........................54
       Закрытие и восстановление окон.................................55
       Сохранение используемой вами схемы окон........................55
       Копирование и вставка..........................................55
       Диалоговое окно Clipboard......................................57
       Окно Clipboard.................................................57
       Типы элементов окна Clipboard..................................59
       Локальное меню окна Clipboard..................................60
       Команды локального меню окна Clipboard Таблица 2.3.............61
       Динамическое обновление........................................61
       Замечания по использованию окна Clipboard......................62
       Получение справочной информации................................62
       Оперативная помощь.............................................64
       Строка состояния...............................................65
       В меню или диалоговом окне.....................................66
     Глава 3. Небольшой пример........................................67
       Примеры программ...............................................67
       Использование Турбо отладчика..................................70
       Меню...........................................................70
       Строка состояния...............................................70
       Окна...........................................................72
       Использование примера программы на языке Си....................73
       Задание точек останова в примере программы на языке Си.........76
       Использование окна Watches.....................................78
       Анализ простых объектов данных программы на языке Си...........79
       Анализ сложных объектов данных программы на языке Си...........81
       Изменение значений данных в программе на языке Си..............82
       Использование примера программы на Паскале.....................83
       Задание точек останова в примере программы на языке Паскаль....86
       Использование окна Watches.....................................87
       Анализ простых объектов данных программы на языке Паскаль......88
       Анализ сложных объектов данных программы на языке Паскаль......90
       Изменение значений данныx в программе на языке Паскаль.........91
     Глава 4. Запуск Турбо отладчика..................................94
       Подготовка программ для отладки................................94
       Подготовка программ Borland C++................................94

       TDeb 3.0 #1-3                 = 3 =

       Подготовка программ Турбо Паскаля..............................95
       Подготовка программ Турбо Ассемблера...........................95
       Запуск Турбо отладчика.........................................96
       Параметры командной строки.....................................97
       Загрузка файла конфигурации (параметр -c)......................97
       Параметры, управляющие выводом на экран (параметры -d).........97
       Параметр -do...................................................97
       Параметр -dp...................................................97
       Параметр -ds...................................................98
       Параметры получения справочной информации (параметры -h и
        -?)...........................................................98
       Параметр переключения идентификатора процесса (параметр -i)....98
       Параметр записи макрокоманды (параметр -k).....................98
       Параметр режима Ассемблера (параметр) -l.......................99
       Параметр задания размера динамической памяти (параметр -m).....99
       Поддержка "мыши" (параметр -p).................................99
       Параметры удаленной отладки (параметры -r)....................100
       Параметр -r...................................................100
       Параметр -rpN.................................................100
       Параметр -rsN.................................................100
       Параметры обработки исходного кода (параметры -s).............100
       Параметр -sc..................................................100
       Параметр -sd..................................................100
       Параметр -smN.................................................101
       Параметры видеоаппаратуры (параметры -v)......................101
       Параметр -vg..................................................101
       Параметр -vn..................................................101
       Параметр -vp..................................................101
       Параметр удаленной отладки для Microsoft Windows (-w).........102
       Параметры, определяющие размер оверлейного буфера
        (параметры -y)...............................................102
       Параметр -yN..................................................102
       Параметр -yeN.................................................103
       Файлы конфигурации............................................103
       Меню Options..................................................104
       Команда Language..............................................104
       Меню Macros...................................................104
       Команда Create................................................104
       Команда Stop Recording........................................105
       Команда Remove................................................105
       Команда Delete All............................................105
       Команда Display Options.......................................106
       Переключатель Diplay Swapping.................................106
       Переключатель Integer Format..................................108
       Переключатель Screen Lines....................................108
       Параметр Tab Size.............................................108
       Команда Path for Source.......................................108
       Команда Save Options..........................................109
       Команда Restore Options.......................................110
       Выполнение в Турбо отладчике DOS..............................110
       Возврат в операционную систему DOS............................110
     Глава 5. Управление выполнением программы.......................111
       Анализ текущего состояния программы...........................111

       TDeb 3.0 #1-3                 = 4 =

       Окно Variables................................................113
       Локальное меню области глобальных переменных..................114
       Команда Inspect...............................................114
       Команда Change................................................114
       Команда Watch.................................................115
       Локальное меню области статических/локальных переменных.......115
       Команда Inspect...............................................115
       Команда Change................................................116
       Команда Watch.................................................116
       Команда Show..................................................117
       Окно Stack....................................................117
       Локальное меню окна Stack.....................................118
       Команда Inspect...............................................119
       Команда Locals................................................119
       Команда локального меню Origin................................119
       Анализ состояния выполнения: команда Get Info.................119
       Формат DOS....................................................120
       Формат Windows................................................123
       Информация о глобальной памяти................................125
       Меню Run......................................................125
       Команда Run [F9]..............................................127
       Команда Go to Cursor [F4].....................................127
       Команда Trace Into [F7].......................................127
       Команда Step Over [F8]........................................127
       Команда Execute To... [Alt-F9]................................128
       Команда Until Return [Alt-F8].................................128
       Команда Animate...............................................128
       Команда Back Trace............................................129
       Команда Instruction Trace [Alt-F7]............................129
       Команда Arguments.............................................129
       Команда Program Reset [Ctrl-F2]...............................129
       Окно Execution History........................................131
       Область инструкций............................................131
       Локальное меню области инструкций.............................132
       Команда Inspect...............................................132
       Команда Reverse Execute [Alt-F4]..............................132
       Команда Full History (Полный протокол)........................133
       Область регистрации нажатий клавиш............................133
       Локальное меню области регистрации нажатий клавиш.............133
       Команда Inspect...............................................135
       Команда Reystroke Restore.....................................135
       Прерывание выполнения программы...............................135
       Клавиши Ctrl-Break............................................135
       Завершение работы вашей программы.............................136
       Возобновление сеанса отладки..................................136
       Перезагрузка программы........................................136
       Запись нажатий клавиш в макрокоманду и повторная их
        отработка....................................................137
       Загрузка новой программы для отладки..........................139
       Изменение аргументов программы................................140
     Глава 6. Анализ и модификация данных............................141
       Меню Data.....................................................141
       Команда Inspect...............................................142

       TDeb 3.0 #1-3                 = 5 =

       Команда Evaluate/Modify.......................................142
       Команда Add Watch.............................................145
       Команда Function Returns......................................145
       Ссылка на элементы данных в исходных файлах...................146
       Окно Watches..................................................147
       Локальное меню окна Watches...................................148
       Команда Watch.................................................148
       Команда Edit..................................................148
       Команда Remove................................................148
       Команда Delete All............................................149
       Команда Inspect...............................................149
       Команда Change................................................149
       Окна Inspector................................................149
       Окна Inspector языка Си.......................................151
       Скалярные величины............................................151
       Указатели.....................................................151
       Структуры и объединения.......................................152
       Массивы.......................................................154
       Функции.......................................................155
       Окна проверки данных для Паскаля..............................155
       Скалярные величины............................................155
       Указатели.....................................................157
       Массивы.......................................................158
       Записи........................................................159
       Функции и процедуры...........................................159
       Окна проверки данных для Ассемблера...........................160
       Скалярные величины............................................160
       Указатели.....................................................161
       Массивы.......................................................162
       Структуры и объединения.......................................162
       Локальное меню окна Inspector.................................164
       Команда Range.................................................164
       Команда Change................................................164
       Команда Inspect...............................................164
       Команда Descend...............................................165
       Команда New Expression........................................165
       Команда Type Cast.............................................165
     Глава 7. Точки останова.........................................167
       Меню Breakpoints..............................................169
       Команда Toggle................................................169
       Команда At....................................................169
       Команда Changed Memory Global.................................169
       Команда Expression True Global................................169
       Команда Hardware Breakpoint...................................170
       Команда Delete All............................................170
       Окно Breakpoints..............................................171
       Локальное меню окна Breakpoints...............................171
       Команда Set Option............................................171
       Команда Add...................................................172
       Команда Remove................................................173
       Команда Delete All............................................173
       Команда Inspect...............................................173
       Команда Group.................................................173

       TDeb 3.0 #1-3                 = 6 =

       Окно списка Groups............................................175
       "Кнопка" Add..................................................175
       Диалоговое окно Breakpoint Options............................177
       Поле Address..................................................178
       Поле Group ID.................................................178
       Переключатель Global..........................................178
       Переключатель Disabled........................................178
       Поле списка Condition and Action..............................179
       "Кнопка" Change...............................................179
       "Кнопка" Add..................................................179
       "Кнопка" Delete...............................................179
       Диалоговое окно Conditions and Actions........................180
       Селективные переключатели условия.............................181
       Селективные переключатели Action..............................183
       Задание условий и действий....................................185
       Выражение условия.............................................185
       Поле ввода Pass Count.........................................187
       Настройка точек останова......................................188
       Простые точки останова........................................188
       Глобальные точки останова.....................................188
       Остановка при изменении объектов данных.......................189
       Выражения условия.............................................190
       Область действия выражений, заданных для точек останова.......190
       Аппаратные точки останова.....................................191
       Регистрация значений переменных...............................191
       Точки останова и шаблоны......................................193
       Точки останова и классы шаблонов..............................193
       Точки останова в шаблонах функций.............................194
       Точки останова в шаблонах экземпляров классов и объектов......194
       Окно Log......................................................194
       Локальное меню окна Log.......................................196
       Команда Open Log File.........................................196
       Команда Close Log File........................................197
       Команда Logging...............................................197
       Команда Add Comment...........................................197
       Команда Erase Log.............................................197
       Команда Display Windows Info..................................197
     Глава 8. Просмотр и модификация файлов..........................198
       Просмотр исходных файлов программы............................198
       Окно Module...................................................199
       Локальное меню окна Module....................................200
       Команда Inspect...............................................201
       Команда Watch.................................................201
       Команда Module................................................201
       Команда File..................................................201
       Команда Previous..............................................202
       Команда Line..................................................202
       Команда Search................................................202
       Команда Next..................................................202
       Команда Origin................................................203
       Команда Goto..................................................204
       Команда Edit..................................................204
       Просмотр других файлов на диске...............................204

       TDeb 3.0 #1-3                 = 7 =

       Окно File.....................................................205
       Локальное меню окна File......................................206
       Команда Goto..................................................206
       Команда Search................................................207
       Команда Next..................................................207
       Команда Display As............................................208
       Команда File..................................................208
       Команда Edit..................................................208

       TDeb 3.0 #1-3                 = 8 =

                                  Введение
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Ниже перечислены лишь некоторые свойства Турбо отладчика:

            - использование расширенной  памяти  типа  EMS  для  отладки
              больших программ;

            - вычисление  любых выражений языка Си,  C++,  Паскаль и Ас-
              семблера;

            - настраиваемое размещение информации на экране;

            - доступ к Ассемблеру и процессору по мере необходимости;

            - мощные средства использования точек останова  и  протокола
              регистрации;

            - запись нажатий клавиш (макрокоманды);

            - средства обратной трассировки отлаживаемой программы;

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

            - поддержка  процессора 80386 и аппаратных отладчиков прочих
              изготовителей;

            - полная поддержка  объектно-ориентированного  программирова-
              ния на Турбо Паскаль 5.5 и старше;

            - полная поддержка языка C++ семейства  компиляторов Borland
              C++;

            - возможности  отладки резидентных в памяти программ и драй-
              веров устройств;

            - возможности отладки прикладных программ Microsoft Windows.




       TDeb 3.0 #1-3                 = 9 =

                    Новые свойства и изменения в версии 3.0
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Турбо отладчик версии 3.0 содержит некоторые улучшения,  ко-
       торые применимы и к отладке в DOS,  и к отладке в Windows. Другие
       улучшения и изменения касаются только отладки в Windows.

            И к отладке в DOS, и к отладке в Windows применимы следующие
       средства:

            - Буфер вырезанного изображения ("карман") Clipboard  позво-
              ляет вам  выполнять  копирование  из окон в текстовые поля
              ввода или в другие окна. Подробнее это средство описывает-
              ся далее.

            - Имеются новые средства,  касающиеся  точек  останова  (см.
              Главу 7), которые позволяют вам:

                 - устанавливать для точки останова множественные  усло-
                   вия и действия;

                - установка и удаление точек останова в группах;

                - задание точек останова для всех процедур и  функций  в
                  модуле;

               - установка  и  отмена точек останова для всех методов  и
                 объектных типов или для всех функций-элементов в  клас-
                 сах.

            - Поддерживаются шаблоны C++ и вложенные классы.

            - Удаленная отладка позволяет работать как в сети, так и че-
              рез последовательную связь (см. Приложение E).

            - С  помощью  установок  DOS  COUNTRY  или  установок  языка
              Windows поддерживаются сортировки в соответствии с набора-
              ми символов разных стран.

            Следующие средства относятся только к отладке в Windows:

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

            - Драйвер   устройства  TDDEBUG.386  обеспечивает  поддержку
       прерывания программы по клавишам Ctrl-Alt-SysRq.  Кроме того этот
       драйвер устройства  поддерживает  аппаратные  отладочные регистры
       процессора Intel   80386   (и  старше).  Об  установке  программы
       TDDEBUG.386 рассказывается далее. Об аппаратной отладке рассказы-
       вается в соответствующем разделе и в файле HDWDEBUG.TD.

            - Отладка DLL теперь выполняется быстрее, поскольку загружа-

       TDeb 3.0 #1-3                = 10 =

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



       TDeb 3.0 #1-3                = 11 =

             Требования к аппаратному и программному обеспечению
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Турбо отладчик  может  работать на компьютерах семейства IBM
       PC,  включая серии XT, AT и PS/2, а также полностью совместимых с
       ними. Компьютер должен работать под управлением операционной сис-
       темы DOS версии 3.1 или более поздней и иметь  как  минимум  384К
       оперативной  памяти.  Компьютер  может быть оснащен любым цветным
       или монохромным монитором,  поддерживающим режим отображения в 80
       столбцов. Мы рекомендуем использовать компьютер с жестким диском.
       При работе с Турбо отладчиком в системе с двумя  накопителями  на
       гибких дисках этого следует использовать дискеты высокой плотнос-
       ти.  Можно также работать с 3.5-дюймовыми дискетами по 720К. Сле-
       дует отметить,  что программа INSTALL в последнем случае неприме-
       нима, и копирование файлов требуется выполнять самостоятельно.

            Турбо отладчик не требует использования математического соп-
       роцессора 8087.

            Турбо отладчик  работает  со  следующими  продуктами   фирмы
       Borland: Borland С++, Турбо Паскаль версии 5.0 или старше, а так-
       же  Турбо  Ассемблер версии 1.0 или старше.  Прежде чем загружать
       программу в Турбо отладчик, необходимо скомпилировать ее исходный
       текст  в  исполняемый  файл типа EXE в режиме формирования полной
       отладочной информации.

            При запуске отладчика TD необходимо, чтобы были доступны как
       выполняемый файл, так и файлы с исходным текстом программы. Турбо
       отладчик ищет исходные файлы сначала там, где их находил компиля-
       тор при компиляции программы, затем в каталоге, заданном командой
       Options/Path for Source (Параметры/Маршрут  доступа  к  исходному
       файлу), затем в текущем каталоге, и в последнюю очередь в том ка-
       талоге, где находится выполняемый файл типа EXE.

                          Замечания по терминологии
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Термин "модуль" в данном руководстве  обозначает  эквивалент
       модуля (module) Си и Ассемблера, а также модуля (unit) Паскаля.

            Термин "функция"  в  данном  руководстве  означает функцию в
       языке Си и то,  что в языке Паскаль называется подпрограммой,  то
       есть охватывает процедуры,функции и объектно-ориентированные пра-
       вила. В языке Си функция может возвращать значение (так же, как и
       функция  в  Паскале),  но  может и не возвращать (как процедура в
       Паскале).  (В Си функция, которая не возвращает значения, называ-
       ется  пустой  (void)  функцией).  Для  краткости изложения термин
       "функция" часто используется для обозначения  как  функций  языка
       Си,  так и функций и процедур языка Паскаль,  конечно,  кроме тех

       TDeb 3.0 #1-3                = 12 =

       разделов руководства, которые посвящены конкретным языкам.

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



       TDeb 3.0 #1-3                = 13 =

                       Содержание данного руководства
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Ниже приведено краткое описание содержания глав и приложений
       данного руководства.

            В Главе  1 "Начало работы" описано содержимое дистрибутивных
       дискет и  сообщается,  как записать файлы Турбо отладчика на свой
       компьютер.  Даются также рекомендации, какую главу читать следую-
       щей, в зависимости от начального уровня знаний.

            В Главе 2 "Отладка и Турбо отладчик" описан пользовательский
       интерфейс отладчика TD,  система меню, окна, объясняется, как от-
       вечать на запросы отладчика и сообщения об ошибках.

            В Главе 3 "Небольшой пример" рассмотрен образец отладки, ко-
       торый  проведет вас по всему сеансу отладки программы, написанной
       либо на Си,  либо на Паскале,  и продемонстрирует многие полезные
       возможности Турбо отладчика.

            В Главе 4 "Запуск Турбо отладчика" рассказано, как запустить
       отладчик из командной строки DOS, для чего используются параметры
       командной строки,  и как записать часто используемые параметры  в
       файл конфигурации.

            В Главе 5 "Управление процессом  выполнения  программы"  де-
       монстрируются различные способы запуска и останова программы, по-
       казывается,  как начать новый сеанс отладки или возобновить  пос-
       ледний сеанс.

            В Главе 6 "Проверка и модификация данных" описаны уникальные
       возможности Турбо отладчика  по  проверке  и  модификации  данных
       внутри отлаживаемой программы.

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

            В Главе 8 "Проверка и модификация файлов" описано,  как про-
       верять и модифицировать исходные файлы программ,  а также  произ-
       вольные дисковые файлы,  содержащие как текстовые, так и двоичные
       данные.

            В Главе 9 "Выражения" описаны синтаксические правила постро-
       ения выражений на языках Си,  C++,  Паскаль и Ассемблер,  которые
       воспринимаются Турбо отладчиком,  а также символы управления фор-
       матом,  которые используются для задания формата  отображения  на
       экране значений выражений.

            В Главе 10 "Отладка С++ и объектно-ориентированного Паскаля"
       рассматриваются специальные средства отладчика, позволяющие прос-

       TDeb 3.0 #1-3                = 14 =

       матривать объекты программ на языке Турбо Паскаль 5.5 и старше, и
       классы программ на языках семейства Borland С++.

            В Главе  11 "Отладка на уровне Ассемблера" описывается,  как
       просматривать содержимое областей памяти в виде неструктурирован-
       ного  шестнадцатиричного  дампа и изменять его,  как использовать
       встроенный Ассемблер и дисассемблер,  как  проверять  и  изменять
       состояние регистров и флагов процессора.

            В Главе 12 "Сопроцессор 80х87 и эмулятор" описано,  как про-
       верять и модифицировать  содержимое  регистров  сопроцессора  или
       состояние его эмулятора.

            В Главе  13 "Справочник по командам отладчика" приведен пол-
       ный перечень всех команд главного меню и  команд  локальных  меню
       всех видов окон.

            В Главе  14 "Отладка программы" описана методика эффективной
       отладки программ.

            В Главе 15 "Виртуальная  отладка  на  машине  с  процессором
       80386" объясняется,  как использовать преимущества дополнительной
       памяти и производительности процессора 80386, позволяя отлаживае-
       мой  программе  использовать  полное  адресное  пространство ниже
       640К, как если бы не был загружен отладчик.

            В Главе 16 "Отладка в защищенном режиме  при  помощи  TD286"
       описано, как использовать TD286 для запуска Турбо отладчика в за-
       щищенном режиме,  освобождая память для отладки больших программ.

            В Главе 17 "Турбо отладчик для Windows (TDW)"  описан запуск
       отладчика TDW и использование его специальных средств.

            В Главе 18 "Отладка прикладной программы для Windows" приво-
       дится пример сеанса отладки при  мера  прикладной  программы  для
       Windows.

            В Главе   19  "Отладка  прикладной  программы,  использующей
       ObjectWindows" показан сеанс отладки примера  программы  Windows,
       написанной с  использованием  Borland  C++ и библиотечного класса
       ObjectWindows.

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

            В Приложении  A  "Параметры командной строки" приведен пере-
       чень всех параметров командной строки, которые подробно описаны в
       Главе 4.

            В Приложении  B  "Технические  замечания" приведены сведения

       TDeb 3.0 #1-3                = 15 =

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

            В Приложении  C "Ключевые слова встроенного ассемблера" при-
       ведены все мнемонические обозначения команд и  специальные слова,
       которые используются при вводе команд для процессоров 8086/80286/
       80386 и 8087/80287/80387.

            В Приложении D "Настройка Турбо отладчика"  объясняется, как
       использовать программу TDINST для настройки  цветов экрана  и из-
       менения параметров отладчика, используемых по умолчанию.

            В Приложении E "Удаленная отладка" описано, как использовать
       утилиту  WREMOTE  для  удаленной  отладки прикладных программ для
       Windows и утилиту TDREMOTE для отладки  прикладных  программ  для
       DOS. Эти утилиты позволяют отлаживать при помощи отладчика, нахо-
       дящегося на одной машине,  программы, находящиеся на другой маши-
       не.

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

            В Приложении G "Отладка программ на  разных  языках"  даются
       некоторые рекомендации по отладке программ, написанных на Си, Ас-
       семблере или Паскале.

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



       TDeb 3.0 #1-3                = 16 =

                  Как обратиться за помощью к фирме Borland
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                            Ресурсы вашего пакета
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данный пакет содержит много ресурсов,  которые могут вам по-
       мочь:

            - В руководстве  дана информация по каждому аспекту програм-
              мы. Используйте его, как основной источник информации. Из-
              менения  и  дополнения  к руководствам можно найти в файле
              MANUAL.TD.

            - Во время работы с программой для получения справочной  ин-
              формации вы можете нажать клавишу F1.

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

                          Возможности фирмы Borland
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            TechFax (8000-822-4269)  - это 24-часовая автоматизированная
       служба, позволяющая свободно получить техническую  информацию  по
       факсу. Вы можете запросить до трех документов за один вызов.

            408-439-9096 (модем)  - пересылка файлов (File DownLoad BBS,
       2500 бод).  Через модем вы можете получать образцы файлов,  прик-
       ладных программ  и техническую информацию.  Специальной установки
       не требуется.

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


       TDeb 3.0 #1-3                = 17 =

            Оперативные информационные услуги
            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
            Служба               Команда
            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
            CompuServe           Go BORLAND
            BIX                  JOIN BORLAND
            GEnie                BORLAND
            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            408-438-5300 - по этому телефону можно обратиться в наш  от-
       дел технического обслуживания по рабочим дням с 6 утра до 5 вече-
       ра. Звоните пожалуйста по телефону, который находится недалеко от
       компьютера с работающей программой.  Прежде чем позвонить, подго-
       товьте следующую информацию:

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

            2. Номер версии вашего продукта. Номер версии Турбо отладчи-
               ка  выводится на дисплей после исходной загрузки програм-
               мы,  до того,  как вы нажмете какие-либо клавиши. Если вы
               находитесь  в  системе  Турбо  отладчика,  выберите пункт
               About из меню Ё (System).

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

            4. Название и номер версии операционной системы. (Номер вер-
               сии можно определить,  введя по приглашению  DOS  команду
               VER).

            5. Содержимое вашего файла AUTOEXEC.BAT.

            6. Содержимое вашего файла CONFIG.SYS.

            7. Содержимое  файлов WIN.INI и SYSTEM.INI,  расположенных в
       каталоге Windows (для вопросов, касающихся TDW).

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

            По телефону  408-438-5300 с 7 до 17 часов вы можете получить
       ответы на нетехнические вопросы,  включая цены,  изменения и т.д.
       (служба покупателя).

       TDeb 3.0 #1-3                = 18 =

                          Рекомендуемая литература
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                Турбо отладчик и средства разработки программ
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Ackerman,Charles. Turbo Debugger and Tools:  A Self-Teaching
       Guide, John Wiley and Sons (New York:1990).

            Swan,Tom. Mastering  Turbo Assembler,  Howard W.Sams and Co.
       (Carmel,IN: 1989).

            Swan,Tom. Mastering Turbo Debugger and Tools,  Howard W.Sams
       and Co. (Carmel,IN: 1990).

            Syck,Gary. The  Waite Group's Turbo Assembler Bible,  Howard
       W.Sams and Co. (Carmel,IN: 1990).

                         Книги по Microsoft Windows
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Microsoft staff. Microsoft Windows Software Development Kit,
       Guide to Programming, Microsoft Corporation. (Redmond, WA: 1990).

            Microsoft staff. Microsoft Windows Software Development Kit,
       Reference, Vols  1 and 2,  Microsoft Corporation.  (Redmond,  WA:
       1990).

            Microsoft staff. Microsoft Windows Software Development Kit,
       Tools, Microsoft Corporation. (Redmond, WA: 1990).

            Petxold, Charles.   Programming  Windows,  Microsoft  Press.
       (Redmond, WA: 1990).





       TDeb 3.0 #1-3                = 19 =

                           Глава 1. Начало работы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Пакет компилятора языка фирмы Borland включает в  себя набор
       дистрибутивных дискет и данное "Руководство пользователя по Турбо
       отладчику" (Turbo Debugger User's Guide).  Дистрибутивные дискеты
       содержат все программы,  файлы и утилиты, необходимые для отладки
       программ, написанных на языках Borland  C++,  Турбо  Ассемблер  и
       Турбо Паскаль. Кроме этого, пакет Турбо отладчика содержит в фай-
       лах  README,  FREELIST.DOC,  HELPME!.TD,   MANUAL.TD,   UTILS.TD,
       HDWDEBUG.TD и DBGGBOARD.TD документацию по вопросам,  не освещен-
       ным в данном руководстве.

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

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

                           Дистрибутивные дискеты
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            При установке Турбо отладчика на свою машину вы будете копи-
       ровать  дистрибутивные  дискеты на рабочие дискеты или на жесткий
       диск.  Вы  можете  запустить  специальную   программу   установки
       INSTALL.EXE,  которая  находится на одной из ваших дистрибутивных
       дискет.  Дистрибутивные дискеты отформатированы под дисководы для
       двухсторонних  дискет  с  двойной  плотностью записи и могут быть
       прочитаны на персональном компьютере семейства IBM PC и совмести-
       мых с ними.  Программа Install копирует все файлы документации  в
       подкаталог DOC    основного   каталога   компилятора,   например,
       C:\BORLANDC\DOC.


            Список файлов,  поставленных вам на дистрибутивных дискетах,
       см. в файле FILELIST.DOC на дискете Installation.

                                 Файл README
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Для того чтобы прочитать содержимое файла README, надо вста-

       TDeb 3.0 #1-3                = 20 =

       вить дискету Installation в дисковод A, сделать его текущим, вве-
       дя с клавиатуры команду A: и, нажав клавишу Enter, затем ввести с
       клавиатуры README и нажать Enter еще раз.  После того, как загру-
       зится файл README,  его содержимое можно прокручивать на экране с
       помощью клавиш "Стрелка вверх" и "Стрелка вниз".  Для  завершения
       просмотра надо нажать клавишу Esc.

                              Файл HELPME!.TD
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            На дискете Installation имеется файл  HELPME!.TD, содержащий
       ответы на вопросы, которые часто возникают у пользователей. Обра-
       щайтесь к этому файлу, когда у вас возникнут какие-либо затрудне-
       ния. Кроме всего прочего,  файл HELPME!.TD содержит информацию по
       следующим вопросам:

            - вывод на экран для программ,  работающих в  графическом  и
              текстовом режимах;

            - выполнение других программ, не выходя из отладчика;

            - прерывание выполнения и выход из отлаживаемой программы;

            - синтаксические  и  грамматические  отличия Турбо отладчика
              от Турбо языков;

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

            - Tandy 1000A,  IBM PC Convertible или NEC MultiSpeed и про-
              чие компьютеры,  использующие NMI (немаскируемые  прерыва-
              ния).

                               Файл MANUAL.TD
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Чтобы ознакомиться с последними изменениями и дополнениями к
       данному руководству, прочтите файл MANUAL.TD.

                           Утилиты Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Пакет Турбо отладчика поставляется с  несколькими утилитами.
       Подробная информация об этих утилитах находится на дистрибутивных
       дискетах. Доступ к этой информации описан в файле README.

            Ниже приводится краткое описание утилит Турбо отладчика:

            - Утилита для связи с файлами на удаленной системе TDRF.EXE,
              работающая вместе с отладчиком и позволяющая передавать на
              удаленную систему основные команды управления файлами.

            - Утилита    удаления    таблицы    имен    идентификаторов,

       TDeb 3.0 #1-3                = 21 =

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

              Примечание: Утилиту  TDSTRIP можно использовать для подго-
              товки к отладке файлов COM.

              Типичное использование этой  утилиты  состоит  в  создании
              файлов .TDS,  используемых для отладчик файлов .COM.  Пос-
              кольку полученный с помощью компилятора файл .COM не соде-
              ржит таблицу идентификаторов,вы можете отладить его, толь-
              ко если сделаете следующее:  скомпилируете исходный код  с
              включением  отладочной  информации  в  односегментный файл
              .EXE,  затем запустите для него утилиту TDSTRIP. Если файл
              .EXE  можно  преобразовать  в файл .COM,  утилита  TDSTRIP
              создает файл .COM и файл .TDS.  После этого вы может отла-
              живать файл .COM, используя для него файл .TDS.

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

            - TDDEV.EXE выводит на дисплей таблицу,  в которой  показана
              информация о драйверах устройств.

            - Утилита  TDMEM.EXE  выводит на дисплей таблицу,  в которой
              показано текущее использование и  доступность  оперативной
              памяти,  включая  расширенную  (expanded) и дополнительную
              (extended) память.

            - Утилита TDUMP.EXE - это дисассемблер объектных  модулей  и
              файлов .EXE.

            - Кроме того, имеется небольшая резидентная программа TDNMI.
              COM,  сбрасывающая триггер срабатывания прерываний при ис-
              пользовании платы Periscope I.

            Для того,    чтобы   получить   список   параметров   утилит
       TDCONVRT.EXE,  TDRF.EXE,  TDSTRIP.EXE,  TDPACK.EXE, TDMAP.EXE или
       TDUMP.EXE,  наберите имя соответствующей команды и нажмите Enter.
       Например,  для  получения  параметров  командной  строки  утилиты
       TDMAP.EXE, введите команду:

            TDMAP



       TDeb 3.0 #1-3                = 22 =

                          Установка Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            На дискете Installation имеется программа INSTALL.EXE, кото-
       рая поможет вам установить  Турбо отладчик версии 3.0 на свою ма-
       шину. Общая информация об установке находится в файле README.


                Установка TDDEBUG.386 для использования c TDW
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            На ваших  установочных  дискетах  имеется  файл TDDEBUG.386,
       обеспечивающий те  же  функциональные  возможности,  что  и  файл
       Windows SDK. Кроме того, он обеспечивает поддержку аппаратных от-
       ладочных регистров процессора 80386 (и старше).

            Программа установки должна  скопировать  этот  файл  на  ваш
       жесткий диск  и  изменить  файл  Windows SYSTEM.INI.  После этого
       Windows вместо WINDEBUG.386 будет загружать TDDEBUG.386. Если ус-
       тановочная программа не сможет этого сделать,  она сообщит вам об
       этом. Тогда вам придется это сделать самостоятельно:

            1. Установочная программа должна копировать на  жесткий диск
               с установочной дискеты файл TDDEBUG.386.  Стандартным ка-
               талогом для этого файла является C:\BORLAND\BIN.  Если вы
               перепишете  этот файл в другой каталог,  подставьте его в
               инструкциях.

            2. С помощью редактора  откройте  файл  Windows  SYSTEM.INI,
               найдите  []386nh]  и  добавьте  с  раздел 386nh следующую
               строку:

                  device*cc:\borlandc\bin\tddebug.386

            3. Если в секции 386nh  имеется  строка,  которая  загружает
               WINDEBUG.386,  то закомментируйте эту строку точкой с за-
               пятой,  или удалите ее  совсем.  (Одновременно  загружать
               TDDEBUG.386 и WINDEBUG.386 нельзя.)

               Например, если вы загружаете WINDEBUG.386 из каталога C:\
               WINDOWS, то комментируемой строкой будет:

                 ;device=c:\windows\windebug.386


                             Аппаратная отладка
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если у  вас  есть  плата  для  аппаратной отладки (например,
       Arton,  Periscope,  Purart Trapper и т.д.) или аппаратный драйвер
       устройства,  вы можете использовать их совместно с Турбо отладчи-
       ком. Обратитесь к изготовителю  относительно  совместимости  этой
       платы с Турбо отладчиком.

       TDeb 3.0 #1-3                = 23 =


            Информацию об  интерфейсе между платами аппаратной отладки и
       Турбо отладчиком можно найти в файле DBGBOARD.TD.


                       Средства аппаратной отладки DOS
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            При работе на компьютере с процессором 80386  можно  устано-
       вить драйвер устройства TDH386.SYS,  который поставляется с Турбо
       отладчиком.  Этот драйвер позволяет существенно ускорить работу с
       точками  останова,  которые следят за изменениями содержимого об-
       ластей памяти и доступом к порту ввода-вывода.

            Скопируйте этот файл в каталог,  где у вас хранятся драйверы
       устройств, и добавьте в файл CONFIG.SYS строку следующего вида:

            DEVICE=\SYS\TDH386.SYS

            При следующей загрузке Турбо отладчика он сможет найти и ис-
       пользовать этот драйвер устройства.

            Примечание: Подробнее  о TD386 и TDH386.SYS рассказывается в
       Главе 15.

            Для получения подробной информации об интерфейсе этого драй-
       вера устройства обратитесь к поставляемой на  диске  документации
       об аппаратном интерфейсе отладчика (файл HDWDEBUG.TD).


             Аппаратная отладка для прикладных программ Windows
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Отладочные регистры процессора Intel 80386 (или старше) мож-
       но использовать для отладки программ Windows.  Чтобы использовать
       эти регистры,  нужно  загрузить  при  запуске Windows TDDEBUG.386
       (см. выше) и,  конечно, использовать для отладки программы отлад-
       чик TDW.

            Более подробно  об отладке прикладных программ Windows расс-
       казывается в файле HDWDEBUG.TD.




       TDeb 3.0 #1-3                = 24 =

                             Что делать дальше?
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


                    Программистам, изучающим Турбо языки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


             Программистам, имеющим опыт работы на Турбо языках
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы  уже  имеете  опыт программирования на одном из Тур-
       бо-языков, вы можете начать с изучения новых  особенностей  среды
       Турбо отладчика, которые описаны в Главе 2. Если это соответству-
       ет вашему стилю работы вы можете проработать учебное руководство,
       либо  же можете сразу перейти к Главе 4 "Запуск Турбо отладчика".
       Полный перечень  команд  отладчика  приведен  в Главе 13 "Команды
       Турбо отладчика".




       TDeb 3.0 #1-3                = 25 =

                      Глава 2. Отладка и Турбо отладчик
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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

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

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

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

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

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

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

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



       TDeb 3.0 #1-3                = 26 =

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

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

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

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

            Примечание: Более  подробное  рассмотрение  процесса отладки
       см. в Главе 14.

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

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

                     Что может вам дать Турбо отладчик?
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

            Турбо отладчик можно использовать для отладки любой програм-
       мы на языке Си или C++ для компилятора семейства  Borland,  Турбо
       Паскале,  Турбо Ассемблере.

            Турбо отладчик можно использовать для решения двух  трудней-

       TDeb 3.0 #1-3                = 27 =

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

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

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

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

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

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

       Изменение            Можно изменить  содержимое  переменной  (как
                            локальной, так и глобальной) на новое значе-
                            ние.

       Прослеживание        Вы можете выделить некоторые программные пе-
                            ременные  и прослеживать изменение их значе-
                            ний в процессе работы программы.
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            В Турбо отладчик версии 2.0 и старше внесены улучшения, поз-

       TDeb 3.0 #1-3                = 28 =

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



       TDeb 3.0 #1-3                = 29 =

                    Что Турбо отладчик не сможет сделать
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            - Он не имеет встроенного редактора  текстов  для  изменения
              вашей исходной программы.  Большинство программистов имеет
              свои излюбленные редакторы, и вполне довольны ими. Было бы
              расточительством  памяти  включать  какой-либо  редактор в
              Турбо отладчик. Однако вы можете легко передать управление
              вашему  текстовому  редактору,  выбрав  глобальную команду
              Edit (Редактирование) окна File (Файл) (о локальных коман-
              дах  рассказывается далее).  Турбо отладчик использует ре-
              дактор,  который задается с  помощью  программы  установки
              TDINST. Если в вас имеется компилятор Borland C++, то мож-
              но использовать для запуска Турбо отладчика из  интегриро-
              ванной  интерактивной  среды программирования Турбо языков
              новое средство передачи (Transfer).

            - Турбо  отладчик не может перекомпилировать вашу программу.
              Для этого вам нужен компилятор  (например,  Турбо  Паскаль
              или Borland C++).

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

                       Как работает Турбо отладчик
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Турбо отладчик TDW обеспечивает вас всеми мощными и сложными
       средствами, сохраняя при этом простоту в использовании.

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

                         Достоинства Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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


       TDeb 3.0 #1-3                = 30 =

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

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

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

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

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

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

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

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

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

                           Меню и диалоговые окна
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В Турбо отладчике,  как и во многих продуктах фирмы Borland,
       используются удобная система глобальных меню, доступных из строки
       меню, выводимой в верхней части экрана.  За исключением того  мо-
       мента, когда активно диалоговое окно, система меню всегда доступ-
       на.

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

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

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

            Как и многие продукты фирмы Borland,  Турбо  отладчик  имеет
       удобную систему меню, которые доступны из горизонтального меню на
       верхней строке экрана (основное или главное меню).  Главное гори-
       зонтальное меню доступно всегда,  независимо от того,  какое окно
       активно (т.е.  в каком окне находится курсор).


       TDeb 3.0 #1-3                = 31 =

            Для каждого  пункта (команды) главного меню имеется спускаю-
       щееся меню. С помощью спускающегося меню вы можете:

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

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

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

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

            Существует 4 способа выбора пунктов из главного меню:

            - Нажать F10,  подвести курсор к требуемому элементу меню  и
              нажать клавишу Enter.

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

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

            - Выбрать  элемент  (пункт) меню с помощью манипулятора типа
              "мышь" и нажать кнопку.

            Для перемещения по всем меню,  кроме  главного,  используйте
       следующие клавиши:

            Используйте стрелки  вправо/влево  для перемещения от одного
       спускающегося меню к другому (например, когда вы находитесь в ме-
       ню File, нажатие стрелки влево переместит вас в меню View).

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

            Используйте клавиши Home и End для перемещения  к  первой  и
       последней альтернативам (командам) меню, соответственно.

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

            С этой же целью можно использовать "мышь",  поместив  указа-
       тель на нужную команду и нажав кнопку.

            Выйти из меню или системы меню можно следующим образом:

       TDeb 3.0 #1-3                = 32 =


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

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

            - F10 для возврата из меню любого уровня в предыдущее актив-
              ное окно.

            - Чтобы  выйти  из системы меню и вернуться в активное окно,
              нажмите в этом окне кнопку "мыши".

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

            Рисунок 13.1 в Главе 13 показывает полное дерево спускающих-
       ся меню для Турбо отладчика TDW. В Таблица 13.1 перечисляются все
       функциональные клавиши.  Перечень всех команд Турбо отладчика TDW
       также приведен в Главе 13.



       TDeb 3.0 #1-3                = 33 =

                              Диалоговые окна
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Многие команды Турбо отладчика доступны с помощью диалоговых
       окон. Диалоговое окно может содержать один или более из следующих
       элементов:

       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
            ЪДДДДДДДДДДї     Программные   "кнопки"  представляют  собой
            і          і±    "теневой" текст  (на  монохромных  системах
            і          і±    он отображается  в  обратном  видеорежиме).
            АДДДДДДДДДДЩ±    Если   вы  выберите   переключатель,  Турбо
              ±±±±±±±±±±±    отладчик немедленно выполнит соответствующее
                             щее действие.  Для подтверждения вашего вы-
                             бора выходите из диалоговых окон  с помощью
                             "кнопки"   с  отметкой  OK.  Для  отмены  -
                             Cancel.  Диалоговые окна содержат также пе-
                             реключатель  (функциональную  кнопку) Help,
                             по которому выводится  справочная  информа-
                             ция.  Вместо "кнопки" OK можно использовать
                             оперативные клавиши Alt-K.

            [X]              Многопозиционные    переключатели    (блоки
                             проверки) - это переключатели, работающие в
                             режиме "включено/выключено". Их можно выби-
                             рать  для  включения/выключения  параметра.
                             При включенном состоянии в квадратных скоб-
                             ках появляется X: [X].

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

            ЪДДДДДДДДДДДДї   Рамки (окна) ввода выводятся для того, что-
            і_           і   бы вы могли  ввести  строку в ответ на под-
            АДДДДДДДДДДДДЩ   сказку. С окном (рамкой) подсказки связыва-
                             ется обычно протокол ввода.

          ЪДДДДДДДДДДДДДДї   Окна списка  содержат список элементов, из
          і THISFILE.EXE і   которых вы можете сделать выбор (например,
          і±THATFILE.EXE±і   мер, список  файлов,  которые  нужно  отк-
          і TOTHERTL.EXE і   крыть).
          АДДДДДДДДДДДДДДЩ
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Для этой цели можно также использовать  "мышь".  Для  выбора
       диалогового окна переместите указатель в его верхних левый угол и
       нажмите кнопку "мыши".

       TDeb 3.0 #1-3                = 34 =


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


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

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

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

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

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

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

            Вы можете так переходить ко все более малым и простым  прог-
       раммным элементам.  Нажатие клавиш Ctrl-I во время просмотра мас-
       сива дает вам представление о некотором элемента массива.

       TDeb 3.0 #1-3                = 35 =


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

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




       TDeb 3.0 #1-3                = 36 =

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

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

            Локальные меню в Турбо отладчике TDW настроены на конкретное
       окно или область,  в которой вы находитесь. Очень важно не путать
       локальные меню с глобальными меню (однако при реальной  работе  в
       TDW оба типа меню никогда одновременно не выводятся).

       ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       іЁ File Edit ±View± Run Breakpoint Data Option Window  Help MENUі
       іЪД ModuleЪДДДДДДДДДДДДДДДДДДДДДДДДДї 181ДДДДДДДДДДДДД1Д[ ][ ]ї і
       іі  type  іBreakpoints±±±±±±±±±±±±±±і                        ^і і
       іі    ParmіStack                    і                        ±і і
       іі    ParmіLog                      і                        ±і і
       іі      PaіWatches                  і<- глобальное меню      ±і і
       іі      HeіVariables                і                        ±і і
       іі    end;іModule...          F3    і                        ±і і
       іі  var   іFile...                  і       ЪДДДДДДДДДДДДї   ±і і
       іі    HeadіCPU                      і       і±±Inspect±±±і   ±і і
       іі    i:  іDump                     і       і  Watch     і   ±і і
       іі    s:  іRegisters                і       іДДДДДДДДДДДДі   ±і і
       іі> begin іNumeric processor        і       і  Module    і   ±і і
       іі    HeadіExecution history        і       і  File...   і   ±і і
       іі    for іHierarchy                і       іДДДДДДДДДДДДі   ±і і
       іі    begiіWindows messages         і       і  Previous  і   ±і і
       іі      { іClipboard                і       і  Line...   і   ±і і
       іі      s:іAnother                 >і       і  Search... і   ±і і
       іі        АДДДДДДДДДДДДДДДДДДДДДДДДДЩ       і  Next      і   vі і
       іі<±±±±±±±±±±±±±±±±±±±±локальное меню ->±±±±і  Origin    і±±>Щі і
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі  Goto...   іДДДДЩ і
       іЪДWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі  Edit      іДДДДї і
       іі                                          АДДДДДДДДДДДДЩ    і і
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
       іAlt:F2-BkptF3-CloseF4-BreakF5-UserF6-UndoF7-InstrF8-RtnF9-To...і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

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

            Сравните следующее:



       TDeb 3.0 #1-3                = 37 =

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

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

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

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

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

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

           - К локальным меню вы получаете доступ нажатием клавиш AltF10
             или Ctrl-F10.

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

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

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



       TDeb 3.0 #1-3                = 38 =

                                  Протоколы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Меню и контекстная зависимость  -  это  только  два  аспекта
       удобной операционной среды Турбо отладчика TDW. Еще одним удобным
       средством являются протоколы (списки регистрации).

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

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

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

       ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       і   File Edit View Run Breakpoint Data Option Window Help   MENUі
       іЪД[*]- Module:  TPDEMO File: TPDEMO.PAS 219 ДДДДДДДДД1Д[ ][ ]ї і
       іі        end                                                ^і і
       іі    Writeln;                                               ±і і
       іі  end; { ParmsOnHeap }                                     ±і і
       іі                                                           ±і і
       іі> begin { program }                                        ±і і
       іі    Init;                                                  ±і і
       іі    Buffer := GetLine;                                     ±і і
       іі    while Buffer <> '' do                                  ±і і
       іі    begin                                                  ±і і
       іі      ProcessLine(Buffer);                                 ±і і
       іі      Buffer := ЪД[*]ДДДEnter search stringДДДДДї          ±і і
       іі    end;        і GetLine                      ^і          ±і і
       іі    ShowResults;і NumLetters                   ±і          ±і і
       іі    ParmsOnHeap;і IsLetter                     ±і          ±і і
       іі end.           і NumLines                     ±і          ±і і
       іі                і                              ±і          vі і
       іі<±±±±±±±±±±±±±±±і                              vі±±±±±±±±±>Щі і
       іАДДДДДДДДДДДДДДДДі OK         Cancel      Help   іДДДДДДДДДДДЩ і
       іЪДWatchesДДДДДДДДі                               іДДДДДДДДДДДї і
       іі                АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ           і і
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
       і±Enter±item±promted±for±in±dialog±title±±±±±±±±±±±±±±±±±±±±±±±±і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 2.2 Протокол в окне ввода

                 Примечание: Первый  элемент  в  списке  поиска   всегда

       TDeb 3.0 #1-3                = 39 =

            представляет собой слово, на которое указывает курсор в окне
            Module (Модуль).

            Для перемещения по протоколу можно использовать  стрелки или
       "мышь". Чтобы начать поиск,  нажмите клавишу Enter. При использо-
       вании записи из протокола она копируется в вершину списка.

            Можно также редактировать записи.  Для этого можно использо-
       вать клавиши стрелок,  переместив курсор  в подсвеченный текст, и
       отредактировать строку обычным образом.  При редактировании можно
       использовать клавиши Del или Backspace.  Например, вы можете выб-
       рать MyPercentage и изменить это имя на HisPercentage, вместо то-
       го, чтобы целиком вводить новый текст.  Если вы начинаете вводить
       новый элемент,  когда запись подсвечена, то старая запись затира-
       ется.

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

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

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

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

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

            - Если введено достаточно символов для однозначной идентифи-
              кации имени, Турбо отладчик дополняет имя.

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

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

                         Расширение по соответствию
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Для нахождения записей в списке файлов или каталогов  диало-
       гового окна  Турбо отладчик позволяет выполнять расширение по со-

       TDeb 3.0 #1-3                = 40 =

       ответствию. Начните вводить имя файла или  каталога.  Если  Турбо
       отладчик найдет  в  списке такой файл,  строка подсветки перемес-
       титься на это имя,  как только вы  введете  достаточно  символов.
       После этого можно просто выбрать "кнопку" OK.

                            Создание макрокоманд
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Макрокоманды - это просто определяемые вами оперативные кла-
       виши. Вы  можете присвоить последовательность команд Турбо отлад-
       чика и нажатий клавиш одной клавише и повторять потом ваши  дейс-
       твия.

                 Примечание: О том, как определить макрокоманду, расска-
            зывается в Главе 4.



       TDeb 3.0 #1-3                = 41 =

                            Окна Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Сегодня многие программные продукты работают  с  окнами,  но
       Турбо  отладчик  делает это лучше.  Турбо отладчик выводит в меню
       (локальных и глобальных) всю информацию и данные, работает с диа-
       логовыми  окнами  (которые используются для задания или ввода ин-
       формации) и другими окнами.  В Турбо отладчике используется  мно-
       жество  различных  типов окон.  Тип окна зависит от того,  какого
       рода информацию он содержит. Открывать и закрывать все окна можно
       с помощью команд меню (или соответствующих им сокращений - опера-
       тивных клавиш).  Большинство окон Турбо отладчика (15 типов окон)
       выводятся из меню View (Обзор).  Другой класс окон, который назы-
       вается окнами проверки (Inspector), выводится при выборе элемента
       меню  DataіInspect  (ДанныеіПроверка) или команды локального меню
       Inspect.

                               Окна меню View
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Перечислим типы окон, которые вы можете открыть из меню View
       (Обзор).

                                  ЪДДДДДДДДДДДДДДДДДДДДї
            Точки останова        і Breakpoints        і
            Стек                  і Stack              і
            Регистрация           і Log                і
            Выражения просмотра   і Watches            і
            Переменные            і Variables          і
            Модуль                і Module...       F3 і
            Файл                  і File...            і
            ЦП                    і CPU                і
            Дамп                  і Dump               і
            Регистры              і Registers          і
            Сопроцессор           і Numeric processor  і
            Протокол выполнения   і Execution history  і
            Иерархия              і Hierarchy          і
            Сообщения Windows     і Windows messages   і
            "Карман"              і Clipboard          і
            Другое                і Another           >і
                                  АДДДДДДДДДДДДДДДДДДДДЩ

            Когда вы открываете одно (или более) из этих окон,  их можно
       перемещать, менять размер,  закрывать и выполнять другие операции
       с помощью команд меню Window (Окно) и Ё (System - Система), о ко-
       торых рассказывается в разделе "Работа с окнами".



       TDeb 3.0 #1-3                = 42 =

                                 Окно Module
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

            Для того, чтобы открыть окно Module, можно также нажать кла-
       вишу F3.

                 Примечание: Более подробно об окне Module и его  коман-
            дах рассказывается в Главе 8.

                                 Окно Wathes
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне Wathes (Просмотр),  которое называют также окном наб-
       людения, выводятся  переменные и их изменяющиеся значения.  Нажав
       клавиши Ctrl-W при позиционировании курсора на имени переменной в
       окне Module (Модуль), вы можете добавить в окно Watches новую пе-
       ременную.

                 Примечание: Подробнее об окне Watches  рассказывается в
            Главе 6.

                              Окно Breakpoints
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Используйте данное окно для изменения, удаления или добавле-
       ния точек останова.

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


                                 Окно Stack
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне  Stack (Стек) выводится текущее состояние стека.  При

       TDeb 3.0 #1-3                = 43 =

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

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

            Подсветив имя функции в стеке и нажав клавиши Ctrl-I, вы от-
       крываете окно Variables (Переменные),  в котором выводятся  пере-
       менные,  глобальные относительно программы, переменные, локальные
       относительно функции, и аргументы вызова функции.
                 Примечание: Более детально об окне Stack рассказывается
                             в Главе 5.

                                  Окно Log
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

            Данное окно позволяет вам вернуться назад и  посмотреть, что
       привело к текущему состоянию.
                 Примечание: Более подробно об окне Log рассказывается в
                             Главе 7.

                               Окно Variables
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Данное окно полезно  использовать,  когда  вы  хотите  найти
       функцию или  переменную и знаете,  с каких символов начинается ее
       имя (например,  "abc"),  но  не помните точного имени.  Вы можете
       войти в область глобальных идентификаторов данного окна  и быстро
       найти то, что вам требуется.
                 Примечание: Подробнее окно Variables описывается в Гла-
                             ве 5.

                                  Окно File
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне  File (Файл) выводится содержимое файла на диске.  Вы

       TDeb 3.0 #1-3                = 44 =

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

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

                 Примечание: Более  подробно об этом окне рассказывается
            в Главе 7.

                                  Окно CPU
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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

            Иногда Турбо отладчик открывает окно CPU автоматически, если
       ваша программа останавливается на инструкции  в  середине  строки
       исходного кода.

                 Примечание: Окно CPU и отладка на уровне Ассемблера об-
            суждаются подробно в Главе 11.

                                  Окно Dump
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне  Dump (Дамп) выводится в непосредственном виде содер-
       жимое области памяти.  (Это окно эквивалентно области данных окна
       CPU.) Вы можете выводить данные в виде символов,  шестнадцатирич-
       ных байт,  слов,  двойных слов,  или в любом формате с  плавающей

       TDeb 3.0 #1-3                = 45 =

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

                 Примечание: Более подробно о данном окне рассказывается
            в Главе 11 при описании отладки на уровне Ассемблера.

                               Окно Registers
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне Registers (Регистры) выводится содержимое регистров и
       флагов процессора (ЦП). Данное окно содержит две области, которые
       эквивалентны областям регистров и флагов окна CPU (ЦП).  Это окно
       можно использовать,  когда вам нужно просмотреть  содержимое  ре-
       гистров,  и вас не интересует прочая информация о состоянии цент-
       рального процессора. Значение любого регистра или флага можно из-
       менить с помощью команды локального меню.

                 Примечание: Более  углубленно о данном окне рассказыва-
            ется в Главе 11,  где описывается отладка на уровне  Ассемб-
            лера.

                           Окно Numeric Processor
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

                 Примечание: Более  подробно  о  работе  с окном Numeric
            Processor рассказывается в Главе 12.

                           Окно Execution History
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне Execution History (Протокол выполнения) выводится код
       Ассемблера и и исходные строки вашей программы, вплоть до послед-
       ней выполняемой строки.  Верхняя область содержит выполненный код
       Ассемблера (вы можете пройти его повторно).  В нижней области вы-
       водится следующее:

            1. Выполняете вы трассировку или выполнение по шагам.

            2. Строка  исходного кода для следующей выполняемой инструк-

       TDeb 3.0 #1-3                = 46 =

               ции.

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

            Вы можете анализировать содержимое данного окна или  исполь-
       зовать его для выполнения вашей программы до конкретной точки.

                 Примечание: Подробнее об окне Execution History расска-
            зывается в Главе 5.

                               Окно Hierarchy
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

                 Примечание: Подробнее  о  данном  окне рассказывается в
            Главе 10.

                  Окно сообщений Windows (Windows Messages)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Это окно выводит список сообщений, передаваемых между окнами
       в вашей прикладной программе для Microsoft Windows. Это окно име-
       ет три области:

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

            - правая область показывает тип отслеживаемых сообщений.

            - в нижней области отображаются сами сообщения.

                 Примечание: Использование средств окна Windows Messages
            описано в Главе 17.

                               Окно Clipboard
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В этом окне выводятся элементы,  которые забраны в буфер вы-
       резанного изображения ("карман"), показаны их типы. Это позволяет
       проверить или удалить элемент и сохранить в "кармане" любое  зна-

       TDeb 3.0 #1-3                = 47 =

       чение элемента.

            Подробнее об окне Clipboard рассказывается ниже.



       TDeb 3.0 #1-3                = 48 =

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

            Вам предоставляется  также возможность открыть дубликаты для
       трех типов окон - Dump,  File или Module. Это можно сделать с по-
       мощью выбора пункта меню ViewіAnother (ПросмотріДругое).

                                   ЪДДДДДДДДДДДДДДДДДДї
                        Модуль     і Module...        і
                        Дамп       і Dump             і
                        Другое     і File...          і
                                   АДДДДДДДДДДДДДДДДДДЩ

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

            Не беспокойтесь о том, если вдруг Турбо отладчик сам откроет
       одно из этих окон.  В некоторых случаях он будет делать это в от-
       вет на команду.

                             Экран пользователя
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Вы можете использовать данный экран для того,  чтобы  прове-
       рить, что  выводит  ваша программа,  и соответствует ли это тому,
       что должно быть на экране.  Для переключения в экран пользователя
       выберите пункт меню WindowіUser Screen (ОкноіЭкран пользователя).
       После просмотра экрана пользователя  нажмите  любую  клавишу  для
       возврата обратно в экран отладчика.

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


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

            В окне  Inspector (Проверка) выводится текущее значение выб-
       ранной переменной.  Его  можно  открыть,  выбрав в локальном меню
       пункт (команду) DataіInspect (ДанныеіПроверка). Обычно данное ок-
       но  выбирается  с  помощью нажатия клавиши Esc или кнопки "мыши".
       Если вы откроете последовательно  несколько  окон  проверки  (что
       часто происходит при  проверке сложных структур данных),  то уда-
       лить все окна проверки можно с помощью клавиш Alt-F3  или команды
       WindowіClose (ОкноіЗакрытие).

       TDeb 3.0 #1-3                = 49 =


            Вы можете открыть окно  Inspector  для  просмотра  элементов
       массива или содержимого переменной или выражения.  Число областей
       в окне зависит от характера проверяемых вами данных. Окно провер-
       ки адаптируется  к тому типу данных,  который выводится на экран.
       Оно может поддерживать не только  простые  скалярные  типы  (int,
       float и т.д.),  но и указатели, массивы, записи, структуры и объ-
       единения. Каждый тип элементов данных выводится в таком виде, ко-
       торый максимально соответствует использованию его в исходном коде
       программы.

            Дополнительные окна проверки можно создать просто  с помощью
       выбора команды Inspect (Проверка),  в то время как дополнительные
       окна Module,  File или CPU можно создать только,  выбрав  элемент
       (команду) меню ViewіAnother (ОбзоріДругое окно).




       TDeb 3.0 #1-3                = 50 =

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

            Хотя в Турбо отладчике  допускается  открывать  одновременно
       много окон,  активным может быть только одно окно.  Активное окно
       соответствует следующим критериям:

            - Активное окно имеет двойную рамку, а не одинарную.

            - Активное окно содержит курсор или строку подсветки.

            - Если окна перекрываются, активное окно находится перед ни-
              ми (первое окно).

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

       ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       іЁ  File Edit View Run Breakpoint Data Option Window Help      MENUі
       іЪДДДДД Module:  TPDEMO File: TPDEMO.PAS 219 ДДДДДДДДД1ДДДДДДДДДДї і
       іі        end ЪДДДДДД Stack ДДДДДД5ДДДДДДДДї                     і і
       іі    Writeln;і TPDEMO                     і                     і і
       іі  end; { Parі   ЪДДДДД Log ДДДДДДДДДДДДДДДДДДД4ДДДДї           і і
       іі            і   і                                  і           і і
       іі> begin { prі   і                                  і           і і
       іі    Init;   і   і                                  і           і і
       іі    Buffer :АДДДі                                  і           і і
       іі    whilЙНН[*]ННDumpННННННННННННННННН3НННН[ ][ ]»  і           і і
       іі    begiє ds:0000 CD 20 00 A0 00 9A F0 FE = & U*^  і           і і
       іі      Prє ds:0008 A4 02 D3 01 C5 41 90 01 .^.Ayo±  і           і і
       іі      Buє ds:0010 C5 41 8D 02 DE 38 D7 2D .Afe!`±ДДЩ           і і
       іі    end;є ds:0018 01 01 01 00 03 FF FF FF oooo. v              і і
       іі    ShowИ<±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>ДЩ              і і
       іі    ParmsOnHeap;     ^                                         і і
       іі end.                і                                         і і
       іі                     АДДДДДДД активное окно                    і і
       іі                                                               і і
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
       іЪДWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і
       іі                                                               і і
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
       іAlt:F2-BkptF3-ClF4-BackF5-UserF6-UndoF7-InstrF8-RtnF9-ToF1-Local  і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 2.3 Активное окно

                            Что выводится в окне?
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно всегда содержит большинство из следующих элементов, ко-
       торые  дают  вам  информацию  об окне и позволяют выполнить в нем
       различные действия.

       TDeb 3.0 #1-3                = 51 =


            пиктограммы переключения и переформатирования окна ДДДДДї
                                                                    і
          Ъпиктограмма ЪД заголовок           номер окна ДДДДДї     і
          і  закрытия  і                                      і     і
          v            v                                      v     v
       ЙН[*]ННModule: TCDEMO File: tcdemo.c (modified) 31ННННН1Н[ ][ ]Н»
       є   static void showargs(int argc, char *argv[]);               ^
       є                                                               ±
       є   /* program entry point                                      ±
       є      */                                                       ±
       є>  int main(int argc, char **argv) {                           ±
       є       unsigned int nlines, nwords, wordcount;                 ±
       є       unsigned long totalcharacters;                          ±
       є                                        полоса прокрутки ДДДДД>±
       є       nlines = 0;                                             ±
       є       nwords = 0;                                             І
       є       totalcharacters = 0;                                    ±
       є       showargs(argc, argv);                                   ±
       є       while (readline() != 0) {                               v
       є             wordcount = makeintowords(buffer);                і
       И<±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щ
            ^                                                          ^
            і                                                          і
            АДДДДДД полоса "прокрутки"            изменение размера ДДДЩ

            Рис. 2.4 Типичное окно

            В окне можно видеть:

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

            - Заголовок, расположенный в левой верхней части окна.

            - полоса  "прокрутки"  (справа и внизу) выводится в том слу-
              чае, если окно содержит информацию, которая не вмещается в
              текущее поле окна.  Перемещать информацию в окне с помощью
              полосы "прокрутки" можно,  используя "мышь".

                 а) Щелкните кнопкой "мыши", переместив указатель на ко-
                    нец полосы "прокрутки" (со стрелкой).  Этим вы пере-
                    местите изображение в заданном направлении  на  одну
                    позицию.

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

                 в) Перемещайте рамку прокрутки настолько и том  направ-
                    лении, как это необходимо.

            - В  нижнем  левом углу окна находится пиктограмма изменения

       TDeb 3.0 #1-3                = 52 =

              размера.  "Зацепив" ее с помощью "мыши" и перемещая, можно
              сделать окно больше или меньше.

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

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

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


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

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

            Большинство команд   управления  окнами  содержится  в  меню
       Windows (Окна). Еще несколько команд можно найти в системном меню
       Ё (System).  Это  меню  отмечено символом Ё в левой чести верхней
       строки меню.

                 Примечание: Для  того,  чтобы  открыть  системное меню,
            нажмите клавиши Alt-пробел или Alt-W.


                      Переход от одного окна к другому
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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


       TDeb 3.0 #1-3                = 53 =

            Вы можете также циклически переходить от окна  к  окну,  ис-
       пользуя команду меню WindowіNext (ОкноіСледующее) или оперативную
       клавишу F6.  Это удобно использовать, если номер окна скрыт, и вы
       не знаете, какую цифру использовать для перехода к нему.

            Кроме того, для активизации окна можно использовать "мышь".

            Для вывода  списка всех открытых окон выберите в строке меню
       команду Window (Окно).  В нижней части меню Window выводится до 9
       открытых окон, из которых вы можете сделать выбор.

            Если у вас открыто более 9 окон,  можно использовать команду
       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                              є
       є    ±±±   ±±±±±   ±±±±±±     ±±±±±±                            є
       ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј

            Рис. 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
             И<±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щ

            Рис. 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           і
                         АДДДДДДДДДДДДДДДДДДЩ




       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             і
                                         АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Если вы хотите вернуться к предыдущему  справочному  экрану,
       нажмите клавиши 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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                                                      ±і
       іє  end.                                                       ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             ±і
       іє          Это окно Module                                    ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             vі
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі           Это окно Watches                                  іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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. Курсор немедленно переходит к строке 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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.

            Если у вас есть "мышь", то переместитесь на 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііnwords                  unsigned int 0 (Ox2)                 іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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)±±±є           іі
       іі            printstИНННННННННННННННННННННННННННННјharacters);іі
       іі            return(0);                                       іі
       іі     }                                                       іі
       іі     /* Чтобы превратить буфер в список завершающихся нулем  іі
       іі        слов, удалить пустое место                           іі
       іі      */                                                     іі
       іі     static int makeintwords(char *bufp) {                   іі
       іі             unsigned int nwords;                            іі
       іі       слов, удалить пустое место                            іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііnwords                  unsigned int 0 (Ox2)                 іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 3.8 Окно Inspector

            В первой строке (заголовке) этого окна вам  сообщается адрес
       данной переменной в памяти.  Третья строка показывает,  какой тип
       данных хранится в переменной nlines (это тип unsigned  int  языка
       Си). Справа указано текущее значение переменной.

            Теперь, проверив  значение этой переменной,  нажмите клавишу

       TDeb 3.0 #1-3                = 80 =

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

            Давайте рассмотрим, что вы в действительности здесь сделали.
       Нажав клавишу 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 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(chАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ              іі
       іі> }         ЙНInspecting Letterinfo[3]НН4Н[ ][ ]»            іі
       іі            є@793E:085E                         є            іі
       іі  /* вывестиєcount                    1 (Ox1)   є            іі
       іі     всю стаєfirstletter              1 (Ox1)   є            іі
       іі            є<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>є            іі
       іі            єstruct linfo                       є            іі
       іАДДДДДДДДДДДДИНННННННННННННННННННННННННННННННННННЅДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііnwords                  unsigned int 0 (Ox2)                 іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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;                                       іі
       іі           totalcharacters = 0;                              іі
       іі           Й[*]Inspecting totalcharactersНН3Н[ ][ ]»         іі
       іі           є@788E:FFC6                             є         іі
       іі           єunsigned±long±±±±±±±±±±±6L±(Ox60)±±±±±±єffer);   іі
       іі           И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>Ѕ         іі
       іі    Й[*]НEnter new value for unsigned long totalcharactersНН»іі
       іі    є totalcharacters + 4                                   єіі
       іі    є                                                       єіі
       іі    є  OK       Cancel        Help                          єіі
       іі    ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННјіі
       іі  }                                                          іі
       іі  і* Превратить буфер в список завершающихся нулевым символоміі
       іі   * строк, которые завершаются двумя нулями, удалив пустое  іі
       іі   * пространство *і                                         іі
       іі  static int makeintowords(char *bufp) {                     іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іEnter item prompted for in dialog title                        і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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і  ±±±±±±± є   іі
       іі>            ИНННННННННННННННННННННННННННННННННННННННННННј   іі
       іі  }                                                          іі
       іі  /* Превратить буфер в список завершающихся нулевым символоміі
       іі   * строк, которые завершаются двумя нулями, удалив пустое  іі
       іі   * пространство */                                         іі
       іі  static int makeintowords(char *bufp) {                     іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іEnter new value                                                і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 3.11 Диалоговое окно Evaluate/Modify

            Expression - выражение;  Result - результат; New value - но-
       вое значение; Enter new value - введите новое значение.

            Это было краткое введение по использованию  Турбо  отладчика
       для работы с программой на языке Си. Более подробно об этом расс-
       казывается в описании примера сеанса отладки в Главе 14,  где ис-
       пользуется версия данной программы с намеренно введенной ошибкой.

                 Использование примера программы на Паскале
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Закрашенная стрелка в левом столбце окна Module (Модуль) по-
       казывает,  где Турбо отладчик остановил выполнение вашей програм-

       TDeb 3.0 #1-3                = 84 =

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

            Посмотрите на правую границу заголовка окна Module (Модуль).
       В ней показана строка,  в которой находится  курсор.  Переместите
       курсор  с помощью клавиш управления курсором  (стрелки)  вверх  и
       вниз и обратите внимание на изменение номера строки в заголовке.

            Чтобы запустить программу на выполнение, пока она не достиг-
       нет строки 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>їі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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 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і
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііNumWords                2 ($2) : WORD                        іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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)є                   іі
       іі      { ПИНННННННННННННННННННННННННННННННј                   іі
       іі      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);                іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііNumWords                2 ($2) : WORD                        іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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);           АєFIRSTLETTER            1 ($1) є   іі
       іі                          є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°>є   іі
       іі      { Найти конец слова,єLINFOREC                      є } іі
       іі      WordLen := 0;       ИННННННННННННННННННННННННННННННј   іі
       іі      while (i <= Length(S)) and IsLetter(S[i]) do           іі
       іі      begin                                                  іі
       іі        Inc(NumLetters);                                     іі
       іі        Inc(LetterTable[UpCase(S[i])].Count);                іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііNumWords                2 ($2) : WORD                        іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іF1=HelpF2=BkptF3=CloseF4=HereF5=ZoomF6=NextF7=TraceF8=StepF9=R.і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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 }           АНННННННННННННННННННННННННННННННј  іі
       іі          Й[*]НEnter new value for numletters : LONGINTНННН» іі
       іі  procedurє Numletters + 4                                 є іі
       іі          є   OK      Cancel      Help                     є іі
       іі  functionє   ±±      ±±±±±±      ±±±±                     є іі
       іі  begin   ИННННННННННННННННННННННННННННННННННННННННННННННННј іі
       іі    IsLetter := UpCase(ch);                                  іі
       іі  end; { IsLetter }                                          іі
       іі                                                             іі
       іі  var                                                        іі
       іі    i : integer;                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііNumWords                2 ($2) : WORD                        іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іEnter item prompted for in dialog title                        і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 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      ИНННННННННННННННННННННННННННННННННННННННННННННј іі
       іі    IsLetter := UpCase(ch);                                  іі
       іі  end; { IsLetter }                                          іі
       іі                                                             іі
       іі  var                                                        іі
       іі    i : integer;                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       ііNumWords                2 ($2) : WORD                        іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іEnter new value                                                і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 3.18 Диалоговое окно команды Evaluate/Mоdify

            Expression - выражение;  Result - результат; New value - но-
       вое значение; Enter new value - введите новое значение.

            Этим мы  завершаем  краткое  введение по использованию Турбо
       отладчика для работы с программой на языке Паскаль. Более подроб-
       но  об  этом  рассказывается  в описании примера сеанса отладки в
       Главе 14.



       TDeb 3.0 #1-3                = 94 =

                       Глава 4. Запуск Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                       Подготовка программ для отладки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                       Подготовка программ Borland C++
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы   используете   интегрированную   среду  компилятора
       Borland C++ (BC.EXE), сделайте следующее:

            1. Выберите    диалоговое    окно     отладчика     (команда
               OptionsіCompilerіAdvanced Code Generation (ПараметрыіКом-
               пиляторіГенерация эффективного кода)) и установите перек-
               лючатель  Debug  Info  in  OBJs (Информация для отладки в
               объектных модулях).

            2. Выберите команду  OptionsіDebugger (ПараметрыіОтладчик) и
               установите параметр Standalone (Автономная отладка).

            3. Выберите команду  OptionsіSave  (ПараметрыіСохранение)  и
               сохраните установленные параметры.

            Если вы используете автономный компилятор,  работающей с ко-
       мандной строкой (BCC), задайте параметр -v командной строки.

            Если вы используете автономный компоновщик TLINK, для добав-

       TDeb 3.0 #1-3                = 95 =

       ления информации для отладки в конец выполняемого файла .EXE нуж-
       но использовать параметр /v.

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

                      Подготовка программ Турбо Паскаля
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Во-первых, вам  необходимо использовать версию Турбо Паскаля
       5.0 или более позднюю. В более ранних версиях отсутствует возмож-
       ность встраивать  информацию  для  отладки,  которой  затем может
       пользоваться отладчик, в файлы .EXE.

            Если вы используете интегрированную интерактивную среду Тур-
       бо Паскаля (TURBO.EXE), то вы должны перейти в меню Debug (Отлад-
       ка) и изменить параметр Standalole Debugging (Автономная отладка)
       в значение On  (Включено).  Переключатель  OptionsіCompilerіDebug
       Information  (ПараметрыіКомпиляторіИнформация  для отладки) нужно
       также перевести в значение On.  Если вы хотите иметь  возможность
       ссылаться на локальные идентификаторы (те идентификаторы, которые
       описываются внутри процедур или функций),  то нужно также устано-
       вить  параметр OptionsіCompilerіLocal Symbols (ПараметрыіКомпиля-
       торіЛокальные идентификаторы) в значение On,  или поместить в на-
       чале  своей программы директиву {$L+}.  Затем вы можете выполнить
       компиляцию программы.

            Если вы  используете  версию компилятора,  работающего с ко-
       мандной строкой (TPC.EXE),  то вы должны выполнять  компиляцию  с
       параметром /v.  По умолчанию при этом будет генерироваться инфор-
       мация для отладки и локальные идентификаторы.  Если вы не  хотите
       их  использовать,  то запретить это можно с помощью параметра ко-
       мандной строки /s.

                    Подготовка программ Турбо Ассемблера
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            При использовании  Турбо Ассемблера для получения полной ин-
       формации для отладки задайте параметр командной строки /zi.

            При компоновке вашей программы с помощью компоновщика TLINK,
       используйте параметр /v для добавления в конец выполняемого файла
       .EXE информации для отладки.



       TDeb 3.0 #1-3                = 96 =

                           Запуск Турбо отладчика
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Чтобы запустить Турбо отладчик,  в ответ  на  подсказку  DOS
       введите  TD,  далее  -  необязательный набор аргументов командной
       строки, и нажмите клавишу Enter. Аргументы командной строки могут
       включать в себя имя отлаживаемой программы и параметры отладчика.

            Если вы просто введете TD и нажмете клавишу Enter, Турбо от-
       ладчик использует параметры, принятые по умолчанию.

            Таким образом, формат командной строки имеет следующий вид:

               TD [параметры] [имя_программы [аргументы_программы]]

            Элементы, заключенные в квадратные скобки, являются необяза-
       тельными.  Если вы их используйте, то набирать их нужно без квад-
       ратных скобок.  "Имя_программы" - это имя той программы,  которую
       требуется  отладить.  За этим именем вы можете указать аргументы.
       Приведем некоторые примеры командных строк:

       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
       Команда             Действие
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
       td -sc prog1 a b    Запускает отладчик с параметром -sc и  загру-
                           жает программу prog1 с двумя аргументами  ко-
                           мандной строки a и b.

       td prog2 -x         Запускает отладчик с параметрами по умолчанию
                           и загружает программу  prog2 с одним аргумен-
                           том x.
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Заметим, что при запуске Турбо  отладчика  вам  должен  быть
       доступен как выполняемый файл .EXE с включенной в него отладочной
       информацией, так и исходные файлы программы.  Турбо отладчик ищет
       исходные файлы сначала в том каталоге,  где их находит компилятор
       при выполнении компиляции, затем в каталоге, заданном в параметре
       OptionsіPath  (ПараметрыіМаршрут)  команды  Source  (Исходный мо-
       дуль),  затем в текущем каталоге, и, наконец, в каталоге, где на-
       ходятся файлы .EXE.

            Перед использованием  Турбо  отладчика вы должны также иметь
       скомпилированный выполняемый файл с полной отладочной  информаци-
       ей.

            Чтобы использовать  Турбо  отладчик   с   продуктами   фирмы
       Borland, вы должны использовать  версию  Турбо  Паскаля  5.0  или
       старше, языки С++ семейства компиляторов Borland, версию Турбо Си
       2.0 или старше,  или версию Турбо Ассемблера 1.0 или  старше.

       TDeb 3.0 #1-3                = 97 =


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

                         Параметры командной строки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Все параметры командной строки начинаются со знака минус (-)
       и отделяются друг от друга и от команды TD по крайней  мере одним
       пробелом.  Вы можете явным образом "выключить" параметр командной
       строки,  если укажете за параметром еще один минус. Например, па-
       раметр -vg- запрещает полное сохранение графики (графического вы-
       вода). Этим  можно  воспользоваться,  если  параметр сохранен для
       постоянного использования в  файле  конфигурации.  Модифицировать
       файл  конфигурации можно с помощью программы конфигурации TDINST,
       работа с которой описана в Приложении D.

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

                  Загрузка файла конфигурации (параметр -c)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данный параметр загружает указанный файл конфигурации. Между
       параметром -c и именем файла конфигурации не должно  быть  пробе-
       лов.

            Если параметр -c не указывается,  то загружается и использу-
       ется файл TDCONFIG.TD. Приведем пример:

               TD -cMYCONF.TD TCDEMO

            По этой команде будет загружен файл конфигурации MYCONF.TD и
       исходный код для TCDEMO.

           Параметры, управляющие выводом на экран (параметры -d)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                                Параметр -do
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Запускает отладчик  на вспомогательном дисплее (втором мони-
       торе).  При этом выводимая программой  информация  появляется  на
       основном дисплее.

                                Параметр -dp
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


       TDeb 3.0 #1-3                = 98 =

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

                                Параметр -ds
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

        Параметры получения справочной информации (параметры -h и -?)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

         Параметр переключения идентификатора процесса (параметр -i)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                 Параметр записи макрокоманды (параметр -k)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данный параметр разрешает запись клавиатурных  макрокоманд в
       области записи  нажатий  клавиш  окна Execution History (Протокол
       выполнения).

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


                  Параметр режима Ассемблера (параметр) -l
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Этот параметр  приводит к инициализации в режиме Ассемблера,
       показывая средство  просмотра инструкций и состояния центрального
       процессора (окно CPU).  Код инициализации компилятора не выполня-
       ется. Это  означает,  что  вы не сможете выполнять (проходить) по
       шагам код инициализации. Обычно этот код выполняется автоматичес-
       ки при загрузке программы.

            Если вы используете Турбо отладчик  с  программой  удаленной
       отладки Windows WREMOTE,  использование при запуске отладчика па-
       раметра -l означает,  что для любых запускаемых вашей  программой
       динамически компонуемых  библиотек  DLL  вы можете отлаживать код
       инициализации на Ассемблере.  Подробнее об этом рассказывается  в
       других частях руководства.

         Параметр задания размера динамической памяти (параметр -m)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Устанавливает динамически распределяемую рабочую область па-
       мяти в n килобайт. Синтаксис параметра следующий:

               -mN

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

               TD -m10 ВCDEMO.EXE

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

            Если вы задаете нулевой  размер  динамически  распределяемой
       области памяти  (с помощью параметра -m0),  то Турбо отладчик ис-
       пользует максимально доступный размер (обычно 18К).

                       Поддержка "мыши" (параметр -p)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Этот параметр  разрешает поддержку манипулятора типа "мышь".
       Поскольку Турбо отладчик поддерживает "мышь" по умолчанию, вам не
       нужно использовать данный параметр, если вы не запретите по умол-
       чанию поддержку "мыши" с помощью программы установки TDINST. Если
       вы хотите  запретить  поддержку "мыши",  можно также использовать
       параметр -p-.

       TDeb 3.0 #1-3               = 100 =


                 Параметры удаленной отладки (параметры -r)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Все параметры -r влияют на удаленные коммуникации отладчика.

                                 Параметр -r
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                               Параметр -rpN
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Устанавливает значение коммуникационного порта в N.  N может
       принимать значения 1 или 2,  что  соответствует  порту  COM1  или
       COM2.

                               Параметр -rsN
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Задает скорость обмена для удаленной коммуникации.  N  может
       иметь значение 1 (скорость 9600 бод), 2 (38400 бод) или 3 (115000
       бод).

              Параметры обработки исходного кода (параметры -s)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Параметры -s  влияют на метод обработки Турбо отладчиком ис-
       ходного кода и идентификаторов программы.

                                Параметр -sc
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Параметр -sc  приводит  к игнорированию регистра (строчные и
       прописные буквы) при вводе имен идентификаторов,  даже если  ваша
       программа скомпонована с разрешением различимости строчных и про-
       писных букв.

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

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

                                Параметр -sd
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


       TDeb 3.0 #1-3               = 101 =

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

               -sdимя_каталогах[;имя_каталога...]

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

                                Параметр -smN
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данный параметр  устанавливает  для  таблицы идентификаторов
       зарезервированный объем памяти. За ним указывается, сколько кило-
       байт вы хотите зарезервировать, например:

               -smN

       где N - число килобайт.  Используйте данный параметр, если вы хо-
       тите загрузить таблицу идентификаторов "вручную" с помощью коман-
       ды FileіSymbol  Load  (ФайліЗагрузка идентификаторов).  Вы можете
       поэкспериментировать, задавая разный объем памяти.

                  Параметры видеоаппаратуры (параметры -v)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                                Параметр -vg
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Сохраняет полный графический  образ  экрана  программы.  При
       этом требуется дополнительно 8К памяти,  но это позволяет отлажи-
       вать программы с отдельными режимами графического вывода.  Попро-
       буйте использовать данный параметр,  если графический вывод вашей
       программы нарушается при работе с Турбо отладчиком.

                                Параметр -vn
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Запрещает использование дисплея в режиме 43/50 строк.  Зада-
       ние данного параметра позволяет сэкономить  некоторое  количество
       памяти. Используйте данный параметр, если вы работаете с дисплеем
       EGA или VGA и знаете,  что вам не потребуется при работе с отлад-
       чиком переходить в режим 43 или 50 строк.

                                Параметр -vp

       TDeb 3.0 #1-3               = 102 =

       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Разрешает сохранения палитры графического адаптера EGA.


            Параметр удаленной отладки для Microsoft Windows (-w)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Указывает, что работает программа удаленной отладки WREMOTE,
       используемая  для  удаленной  отладки  прикладных  программ   для
       Microsoft Windows.


       Параметры, определяющие размер оверлейного буфера (параметры -y)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Эти параметры используются для задания  размера  оверлейного
       буфера (в оперативной или в расширенной памяти).


                                Параметр -yN
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

               -yN

            Обычно Турбо отладчик использует для буферного пула 80К. На-
       именьший размер, который вы можете установить - это 20К, наиболь-
       ший - 200К.

            Для установки постоянного размера  буфера  оверлейного  кода
       используйте утилиту TDINST.

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




       TDeb 3.0 #1-3               = 103 =

                                Параметр -yeN
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            -yeN

       где N определяет число страниц (по 16К) EMS,  которые  вы  хотите
       зарезервировать.

            Например, параметр -ye4 устанавливает для оверлейного буфера
       размер 4 страницы. По умолчанию используется 16 страниц расширен-
       ной памяти.

            Параметр -ye0 запрещает использовать оверлейный буфер в рас-
       ширенной памяти.

                             Файлы конфигурации
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Турбо отладчик  ищет файл конфигурации TDCONFIG.TD сначала в
       текущем каталоге,  затем в каталоге  TURBO,  заданном  с  помощью
       программы установки TDINST,  а затем в каталоге,  содержащем файл
       TD.EXE. Если вы работаете в DOS версии 2.0,  то отладчик не будет
       искать файл конфигурации в каталоге, где находится TD.EXE.

                 Примечание: Глава  17 описывает использование программы
            TDINST для  создания  файла конфигурации Турбо отладчика для
            Windows (TDW).

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

                 Приложение: В  Приложении D описывается,  как использо-
            вать программу установки для создания файлов конфигурации.




       TDeb 3.0 #1-3               = 104 =

                                Меню Options
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                                              ЪДДДДДДДДДДДДДДДДДДДДДДДї
            Язык                              і Language...    Source і
            Макрокоманды                      і Macros              > і
            Параметры дисплея                 і Display options...    і
            Маршрут доступа к исходному файлу і Path for source...    і
            Параметры сохранения              і Save options...       і
            Параметры восстановления          і Restore options...    і
                                              АДДДДДДДДДДДДДДДДДДДДДДДЩ


                              Команда Language
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


                                 Меню Macros
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

                                 ЪДДДДДДДДДДДДДДДДДДДДДДї
            Создать              і Create          Alt= і
            Остановить запись    і Stop recording  Alt- і
            Удалить              і Remove               і
            Удалить все          і Delete all           і
                                 АДДДДДДДДДДДДДДДДДДДДДДЩ

            По команде Macros (Макрокоманды) выводится другое меню,  ко-
       торое позволяет вам определить  новые  макрокоманды,  выполняемые
       при нажатии клавиш, или отменить те из них, которые уже присвоены
       клавише. Она содержит следующие подкоманды.

                               Команда Create
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            По команде  Create (Создание) начинается запись нажатий кла-
       виш, которые должны быть  присвоены  клавише  (например,  Alt-M).
       Сначала вам выводится подсказка, где запрашивается, какой клавише
       вы хотите присвоить значения (нажатия клавиш).  Чтобы начать  за-
       пись, выберите  команду OptionsіMacrosіCreate (ПараметрыіМакроко-
       мандыіСоздание). После вывода указанной выше подсказки  и  ответа
       на нее вы можете нажимать клавиши,  которые хотите записать.  При

       TDeb 3.0 #1-3               = 105 =

       записи макрокоманды в правом верхнем углу экрана выводится  сооб-
       щение RECORDING (запись).

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

                           Команда Stop Recording
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Эта команда прекращает запись нажатий клавиш (запись  макро-
       команды), которые будут присвоены клавише. Используйте данную ко-
       манду после команды OptionsіMacrosіCreate (ПараметрыіМакрокоманды
       іСоздание) для присваивания клавише значений нажатий клавиш (мак-
       рокоманды). Завершить  макрокоманду  можно  с помощью сокращенной
       команды (клавиши Alt-минус).

            Не используйте для завершения  записи  макрокоманды  команду
       меню OptionsіMacroіStop Recording,  так как эти клавиши будут до-
       бавлены в вашу макрокоманду (данный элемент меню  добавлен только
       для того, чтобы напомнить вам о клавишах Alt-минус).


                               Команда Remove
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Remove  (Удалить) удаляет макрокоманду,  присвоенную
       клавише. Вам будет выведена подсказка с указанием нажать клавишу,
       макрокоманду которой вы хотите удалить.

                             Команда Delete All
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Delete All (Удалить  все)  удаляет  все  определения
       макрокоманд  для клавиш и присваивает им первоначальные значения.



       TDeb 3.0 #1-3               = 106 =

                           Команда Display Options
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Display  Options  (Вывести  параметры) позволяет вам
       открыть диалоговое окно, в котором вы можете задать некоторые па-
       раметры, управляющие режимом вывода Турбо отладчика. Эти парамет-
       ры перечислены далее.

       ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       іЁ File Edit View Run Breakpoints Data Options Window HelpPROMPTі
       іЙН[*]НModule: TPDEMO  file: TPDEMO.PAS 217НННННННННННН1Н[ ][ ]»і
       іє      end;                                                   ^і
       іє    Writeln;    Й[*]ННННННННННННННDisplay optionsНННННННННН» Іі
       іє  end; { ParmsOnє Display swapping       Integer format    є ±і
       іє                є                         ( )  Hex         є ±і
       іє> begin { prograє  (.) Smart              ( ) Decimal      є ±і
       іє    Init;       є  ( ) Always             (.) Both         є ±і
       іє    Buffer := Geє                                          є ±і
       іє    whil[e Buffeє Screen lines           Tab size          є ±і
       іє    begin       є  (.) 25   ( ) 43/50     8                є ±і
       іє     ProcessLineє     OK         Cancel       Help         є ±і
       іє     Buffer := Gє     ±±         ±±±±±±       ±±±±         є ±і
       іє    end;        ИННННННННННННННННННННННННННННННННННННННННННј ±і
       іє    ShowResults;                                             ±і
       іє    ParmsOnHeap;                                             ±і
       іє  end.                                                       ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             vі
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іAccept current settings and proceed                            і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 4.1 Диалоговое окно Display Options

            Display swapping - переключение  экрана;  Integer  format  -
       формат целых чисел; Screen lines - строки экрана; Tab Size - раз-
       мер табуляции;  Accept current settings and proceed -  воспринять
       текущие установки и обработать.

                        Переключатель Diplay Swapping
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

        None      (отсутствует)   Нет переключения между  экранами.  Ис-
                                  пользуйте данный параметр, если вы от-

       TDeb 3.0 #1-3               = 107 =

                                  лаживаете программу,  которая не выво-
                                  дит никакой информации на экран.

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

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



       TDeb 3.0 #1-3               = 108 =

                        Переключатель Integer Format
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Селективный переключатель  Integer  Format (Формат целых чи-
       сел) позволяет вам определить один из трех  форматов, управляющих
       выводом целых чисел:

               Decimal (Десятичный)         Целые числа  выводятся,  как
                                            обычные десятичные значения.

               Hex     (Шестнадцатиричный)  Целые числа   выводятся    в
                                            шестнадцатиричном   виде   в
                                            формате,  принятом  в  соот-
                                            ветствующем языке.

               Both    (Оба)                Целые числа  выводятся и как
                                            десятичные, и как шестнадца-
                                            тиричные  значения  (которые
                                            указываются в  скобках после
                                            шестнадцатиричных значений).

                         Переключатель Screen Lines
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Селективный переключатель Screen Lines (Размер экрана) можно
       использовать для того,  чтобы определить, использует ли Турбо от-
       ладчик обычный 25-строчный режим экрана или 40-  или  50-строчный
       режим, доступный при использовании адаптеров EGA и VGA.


                              Параметр Tab Size
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Параметр Tab  Size  (Размер  табуляции) позволяет определить
       позиции при каждой табуляции.  Вы можете уменьшить число  позиций
       табуляции, чтобы можно было видеть больше исходного текста в фай-
       лах,  выравнивание кода выполнено с помощью табуляции. Размер по-
       зиции табуляции можно установить в значения от 1 до 32.


                           Команда Path for Source
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Path for Source (Маршрут доступа к  исходному файлу)
       задает  каталоги,  в которых Турбо отладчик будет искать исходные
       файлы.  Более подробно эта команда описывается  в  Главе  8,  где
       рассказывается об окне Module (Модуль).




       TDeb 3.0 #1-3               = 109 =

                            Команда Save Options
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Save Options (Сохранить параметры) открывает  диало-
       говое окно,  с помощью которого вы можете сохранить текущие пара-
       метры на диске в файле конфигурации. В этом файле сохраняются:

            - ваши макрокоманды;

            - текущая схема окон и форматы областей окон;

            - все значения параметров, заданные в меню Options (Парамет-
              ры).

       ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
       іЁ File Edit View Run Breakpoints Data Options Window HelpPROMPTі
       іЙН[*]НModule: TPDEMO  file: TPDEMO.PAS 217ННННННННННН1Н[ ][ ]Н»і
       іє     end;                                                    ^і
       іє   Writeln;                                                  Іі
       іє end; { ParmsOnHeap }         Й[*]НННSave configurationННННН»±і
       іє                              є [X] Options           OK    є±і
       іє begin { program }            є [ ] Layout            Cancelє±і
       іє   Init;                      є [ ] Macros            ±±±±± є±і
       іє   Buffer := GetLine;         є                             є±і
       іє   whil[e Buffer <> '' do     є Save to               Help  є±і
       іє   begin                      є  tdconfig.tdw         ±±±±± є±і
       іє    ProcessLine(Buffer);      ИНННННННННННННННННННННННННННННј±і
       іє    Buffer := GetLine;                                       ±і
       іє   end;                                                      ±і
       іє   ShowResults;                                              ±і
       іє   ParmsOnHeap;                                              ±і
       іє end.                                                        ±і
       іє                                                             ±і
       іє                                                             ±і
       іє                                                             vі
       іИ<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щі
       іЪWatchesДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД2їі
       іі                                                             іі
       іАДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩі
       іSave all configuration information                             і
       АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Рис. 4.2 Диалоговое окно Save Options

            Save configuration - сохранение конфигурации;  Options - па-
       раметры; Layout  - схема окон;  Macros - макрокоманды;  Save to -
       сохранить в...;  Save all configuration information  -  сохраняет
       всю информацию о конфигурации;  OK - выбрать;  Cancel - отменить;
       Help - справка.

            Турбо отладчик позволяет вам сохранить все или выбранные па-
       раметры, в зависимости от ваших установок:


       TDeb 3.0 #1-3               = 110 =

            Options - сохраняются все  значения,  установленные  в  меню
                      Options.

            Layout  - сохраняется только схема окон.

            Macros  - сохраняются только текущие (определенные) макроко-
                      манды.

                           Команда Restore Options
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Restore  Options  (Восстановить параметры) позволяет
       восстановить параметры из файла на диске.  Вы можете создать нес-
       колько файлов конфигурации, записав в них различные макрокоманды,
       схемы окон и т.д. Требуется задавать файл параметров, созданный с
       помощью команды  Save  Options  (Сохранить параметры) или утилиты
       TDINST.

                      Выполнение в Турбо отладчике DOS
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            При отладке программы иногда возникает необходимость исполь-
       зовать другую программу или утилиту.  Это можно сделать с помощью
       команды FileіDOS Shell (ФайліСреда операционной системы).

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

                 Предупреждение: При временном выходе в DOS не загружай-
            те над Турбо отладчиком резидентных программ.

            Когда вы закончите вводить команды DOS, для возврата в сеанс
       отладки введите команду EXIT и нажмите клавишу Enter.


                  Возврат в операционную систему DOS
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В любой  момент (за исключением того момента,  когда активно
       диалоговое окно) с помощью нажатия клавиш Alt-X вы можете  завер-
       шить  сеанс отладки и вернуться в DOS.  Для этого можно также ис-
       пользовать команду FileіQuit (ФайліВыход).  Если открыто диалого-
       вое окно, вы сначала должны закрыть его, нажав клавишу Esc.

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


       TDeb 3.0 #1-3               = 111 =

                  Глава 5. Управление выполнением программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            - выполнять  одну машинную инструкцию или одну строку исход-
              ного кода;

            - "пропускать" вызовы процедур или функций;

            - выполнять непрерывную ("автоматическую") трассировку;

            - выполнять программу, пока текущая процедура или функция не
              возвратит управление в вызывающую программу;

            - выполнять программу до определенного адреса;

            - выполнять программу до точки останова.

            - выполнять  программу  в  обратном направлении (отмена инс-
              трукций).

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

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


                      Анализ текущего состояния программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Состояние" вашей программы включает в себя  следующие  эле-
       менты:

            - аргументы командной строки DOS для этой программы;

            - стек активных функций или процедур;

            - текущее положение в исходном или машинном коде;

       TDeb 3.0 #1-3               = 112 =


            - значения регистров;

            - содержимое памяти;

            - причину,  по которой отладчик остановил  выполнение  вашей
              программы;

            - значение переменных вашей программы.

            О том, как проверить и изменить значения переменных и данных
       вашей  программы подробнее рассказывается в Главе 6.  В следующих
       разделах описываются  окно  Variables  (Переменные),  окно  Stack
       (Стек), локальные меню областей глобальных и статических перемен-
       ных, команда Origin (Начало) и команда Get Info (Получение инфор-
       мации).



       TDeb 3.0 #1-3               = 113 =

                               Окно Variables
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

              Й[*]НVariablesННННННННННННННННННННННННН3Н[ ][ ]Н»
              є TPDEMO.SHORESULTS              @7129:01fA     є
              є TPDEMO.INIT                    @7129:0402     є
              є TPDEMO.PROCESSLINE             @7129:04B5     є
              є TPDEMO.GETLINE                 @7129:05A5     є
              є TPDEMO.PARMSONHEAP             @7129:0651     є
              є TPDEMO.NUMLINES                1 ($1)         є
              є TPDEMO.NUMWORDS                0 ($0)         є
              є<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>є
              є CH                             'A'            є
              є ISLETTER                       True           є
              є S                              'ABC DEF'      є
              є I                              1 ($1)         є
              є WORDLEN                        28969          є
              ИННННННННННННННННННННННННННННННННННННННННННННННДЩ

            Рис. 5.1 Окно Variables

            При отладке программы на Турбо Паскале переменные  не  будут
       упорядочиваться по алфавиту.

            Окно Variables (Переменные) можно открыть, выбрав в основном
       меню команду View/Variables  (Обзор/Переменные).  Окно  Variables
       содержит две области:

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

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

            В обеих областях выводится имя переменной (слева) и ее  зна-
       чение (справа). Если Турбо отладчик не может найти никакой инфор-
       мации о типе данных идентификаторов,то он выводит четыре вопроси-
       тельных знака (????).

            Как и во всех других локальных меню,  нажатие клавиш Alt-F10
       приводит к выводу локального меню области глобальных данных. Если
       разрешено использование сокращений с клавишей Ctrl, то для досту-
       па к команде можно нажать клавишу Ctrl с первой  буквой описанной

       TDeb 3.0 #1-3               = 114 =

       команды.

            Если ваша программа содержит функции,  которые выполняют ре-
       курсивные вызовы, или вы хотите просмотреть переменные, локальные
       по отношению к вызванной функции, то вы можете проверить значение
       конкретных локальных данных функции.  Сначала с  помощью  команды
       View/Stack  (Обзор/Стек) создайте окно Stack (Стек),  затем пере-
       местите подсветку на вызов нужной функции.  Затем нажмите клавиши
       Alt-F10 для выбора команды Locals (Локальные). При этом в области
       статических данных окна Variables (Переменные) выведутся значения
       для данного конкретного вхождения функции.


                Локальное меню области глобальных переменных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В этом  локальном  меню   имеется   три   команды:   Inspect
       (Проверка), Change (Изменение) и Watch (Просмотр).

                          ЪДДДДДДДДДДДДДї
                          і Ispect      і      Проверка
                          і Change      і      Изменение
                          і Watch       і      Просмотр
                          АДДДДДДДДДДДДДЩ


                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данная команда открывает окно Inspector (Проверка),  в кото-
       ром показано значение выбранной глобальной переменной.

            Если переменная, которую необходимо проверить, является име-
       нем функции,  в окне будет показан ее исходный текст,  либо (если
       исходный текст  недоступен) в окне процессора (CPU) будет показан
       дисассемблированный код.

                 Примечание: Работа с  окном  Inspector  более  подробно
            описана в Главе 6.

            Если имеется  локальная переменная,  имя которой совпадает с
       проверяемой глобальной переменной,  будет показано значение  гло-
       бальной переменной, а не локальной. Такое поведение немного отли-
       чается от обычного поведения окна Inspector, которое обычно пока-
       зывает значение переменной,  связанное с текущей точкой программы
       (CS:IP). Благодаря этому, пользователь может просматривать значе-
       ния  глобальных переменных,  имена которых используются и для ло-
       кальных переменных.

                               Команда Change
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данная команда заменяет значение выбранной (выделенной) гло-

       TDeb 3.0 #1-3               = 115 =

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

                 Примечание: Более подробная информация о присваивании и
            преобразовании типов данных приведена в Главе 9.

            Кроме этого,  можно изменить значение выбранной  переменной,
       просто  открыв окно Inspector и начав вводить новое значение. При
       этом появляется такой же блок диалога,  как если бы сначала  была
       выбрана команда Change (Изменение).

                                Команда Watch
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Эта команда открывает окно Watches (Просмотр) и  помещает  в
       него текущее выбранное (выделенное) имя глобального идентификато-
       ра.  Данная команда просто помещает в окно Watches строку  симво-
       лов.

                 Примечание: Информацию об окне Watches см. в Главе 6.

            Окно Watches не отслеживает, является ли переменная глобаль-
       ной  или локальной.  Если в окно вы поместили командой Watch гло-
       бальную переменную, а затем вам встретится локальная переменная с
       тем же именем, то пока вы будете находиться в блоке локальной пе-
       ременной,  последняя будет иметь преимущество.  Другими  словами,
       окно Watches всегда показывает значение переменной с точки зрения
       текущего исполнительного адреса программы (CS:IP).


           Локальное меню области статических/локальных переменных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Область статических/локальных переменных содержит четыре ко-
       манды локального меню:  Inspect (Проверка),  Change  (Изменение),
       Watch (Просмотр) и Show (Вывод).

                          ЪДДДДДДДДДДДДДї
                          і Ispect      і      Проверка
                          і Change      і      Изменение
                          і Watch       і      Просмотр
                          і Show        і      Вывод
                          АДДДДДДДДДДДДДЩ


                               Команда Inspect

       TDeb 3.0 #1-3               = 116 =

       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка)  открывает  окно  проверки  (окно
       Inspector), в котором выводится содержимое подсвеченного в данный
       момент локального идентификатора.

                 Примечание: Более  подробно  о  поведении окна проверки
            рассказывается в Главе 6.


                               Команда Change
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Change (Изменение) изменяет  значение  выбранного  в
       данный  момент  (подсвеченного)  локального  идентификатора на то
       значение, которое вы введете в ответ на подсказку. Турбо отладчик
       выполняет все необходимые преобразования типов данных так  же как
       это делается в операторе присваивания в используемом языке.

                 Примечание: Более  подробно о присваивании и преобразо-
            вании типов данных рассказывается в Главе 9.

            Вы можете также изменить значение  текущего  (подсвеченного)
       идентификатора, просто  начав  вводить  новое значение.  Когда вы
       сделаете это,  появляется такая же подсказка,  как и после  ввода
       команды Change.


                                Команда Watch
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Открывает окно  Watches  и помещает в него текущее выбранное
       (выделенное) имя статического или локального идентификатора.

                 Примечание: Более  подробно работа с окном Watches опи-
            сана в Главе 6.



       TDeb 3.0 #1-3               = 117 =

                                Команда Show
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            При выборе  команды  Show  (Вывод)  появляется  окно диалога
       Local Display, позволяющее изменить область определения показыва-
       емых переменных (статические,  локальные динамические или и те, и
       другие) и модуль, из которого эти переменные выбираются.

            В диалоговом окне вам предлагается сделать выбор  при помощи
       следующих селективных переключателей:

            Static   Показывать только статические переменные.

            Auto     Показывать  только  локальные  переменные   данного
                     блока.

            Both     Показывать оба типа переменных (по умолчанию).

            Module   Изменить текущий модуль.  Выводит окно  диалога  со
                     списком модулей  программы,  в  котором  вы  можете
                     вызвать новый модуль.

                    Й[*]ННННННLocal DisplayННННННН3Н[ ][ ]»
                    є                                     є
                    є ( ) Static                 OK       є
                    є ( ) Auto                   Cancel   є
                    є (*) Both                   Help     є
                    є ( ) Module                 ±±±±±±   є
                    є                                     є
                    ИНННННННННННННННННННННННННННННННННННННј

            Рис. 5.2 Диалоговое окно Local Display

                                 Окно Stack
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                    Й[*]ННStackНННННННННННННН3НННН[ ][ ]Н»
                    єTPDEMO.PROCESSLINE.ISLETTER('A')    є
                    єTPDEMO.PROCESSLINE('ABCDEF')ІІІІІІІІє
                    є                                    є
                    є                                    є
                    И<±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Ѕ

            Рис. 5.3 Окно Stack

       TDeb 3.0 #1-3               = 118 =


            Для программ,  реализующих  методы объектно-ориентированного
       программирования, окно Stack показывает  имена  методов  объектов
       или функции-элементов классов,  перед  которыми  указывается  имя
       объекта или тип класса, определяющие метод или функцию:

               SHAPES.ACIRCLE(174, 360, 75.0)   { Турбо Паскаль }

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


                          Локальное меню окна Stack
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Локальное меню  окна  Stack  содержит  две команды:  Inspect
       (Проверка) и Locals (Локальные переменные).

                   ЪДДДДДДДДДДДДДї
                   і Inspect     і     Проверка
                   і Locals      і     Локальные переменные
                   АДДДДДДДДДДДДДЩ


       TDeb 3.0 #1-3               = 119 =

                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка) открывает окно  Module  (Модуль),
       позиционированное на активную строку в текущей подсвеченной функ-
       ции.  Если подсвеченная функция находится в вершине  списка  (это
       последняя вызванная функция), то в окне Module показывается теку-
       щий адрес программы (CS:IP). Если подсвечена одна из функций, ко-
       торые  вызывали последнюю функцию,  то окно позиционируется на ту
       строку в функции, которая будет выполняться после того, как вызы-
       ваемая функция возвратит управление.

            Вы можете также вызвать эту команду, позиционировав подсвет-
       ку на функции и нажав клавишу Enter.


                               Команда Locals
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


                       Команда локального меню Origin
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Module  и область Code (Код) окна CPU (Центральный про-
       цессор) содержат в составе локального меню команду Origin  (Нача-
       ло). Команда Origin позиционирует курсор по текущему адресу прог-
       раммы (CS:IP).  Это может  оказаться  очень  полезным,  когда  вы
       просмотрели вашу программу и хотите вернуться обратно к тому мес-
       ту, где она остановилась.


                Анализ состояния выполнения: команда Get Info
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Вы можете выбрать команду FileіGet Info (ФайліПолучение  ин-
       формации)  для  анализа  использования памяти и определения того,
       почему получил управление отладчик. Эта и другая информация отоб-
       ражается в текстовом блоке,  который удаляется с экрана при нажа-
       тии клавиши Enter, пробела или Esc. В этом окне отображается сле-
       дующая информация,  в зависимости от того,  отлаживаетесь ли вы в
       DOS, или в Windows.




       TDeb 3.0 #1-3               = 120 =

                                Формат DOS
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы отлаживаете программу для DOS,  то  в  блоке  System
       Information будет выведена следующая информация:

          - имя отлаживаемой вами программы;

          - описание причины остановки программы;

          - объемы памяти,  используемой DOS,  Турбо отладчиком и  вашей
            программой;

          - если  у вас имеется расширенная память (EMS) то ее использо-
            вание показывается справа от использования основной памяти;

          - список прерываний, перехваченных отлаживаемой программой;

          - версия DOS, под управлением которой вы работаете;

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

                    Й[*]ННННSystem InformationНННННННННННН»
                    єProgram: D:\PASCAL\EXAMPLES\EMS.EXE  є
                    єStatus:  Stopped at #TCDEMO#38       є
                    є                                     є
                    є______Memory____ ______EMS__________ є
                    є DOS     : 177Kb DOS:     :    464Kb є
                    є Debugger: 282Kb Debugger :    272Kb є
                    є Symbols :   1Kb Program  :      0Kb є
                    є Program :  83Kb Avaliable:    788Kb є
                    є Avaliable:  94Kb                    є
                    є                                     є
                    є User Interrupt:  00h  02h           є
                    є                                     є
                    є DOS Version    : 5.00               є
                    є BreakPoints    : Software           є
                    є 7-9-1988  12:45 pm                  є
                    є               OK                    є
                    є              ±±±±                   є
                    ИНННННННННННННННННННННННННННННННННННННј

            Рис. 5.4 Текстовое окно команды Get Info для DOS

            Debugger -  отладчик;  Symbols  - идентификаторы;  Program -
       программа; Memory - память; EMS - расширенная память; Avaliable -
       доступно памяти; User interrupt - прерывание пользователя; Status
       - состояние;  Stopped at...  - остановлено на...;  DOS Version  -
       версия DOS; BreakPoints - точки останова; Software - программные.

            На второй строке данного окна, где описывается причина оста-
       новки программы, могут выводиться следующие сообщения:

       TDeb 3.0 #1-3               = 121 =


            Stopped at_ (остановлена на...)

            Ваша программа  остановлена  в результате выполнения команды
       RUNіExecute To (ЗапускіВыполнение до...),  RunіGo to Cursor  (Вы-
       полнениеіПереход к курсору),  или RunіUntil Return (ВыполнениеіДо
       возврата управления).  В этой строке состояния  выводится  также,
       где была сначала загружена ваша программа,  и выполнялся ли в ва-
       шей программе код инициализации компилятора для перехода на нача-
       ло исходного кода.

            No program loaded (программа не загружена)

            Вы запустили Турбо отладчик без программы. Невозможно выпол-
       нить никакой код,  пока вы не загрузите целиком программу или  не
       ассемблируете  некоторые  инструкции с помощью команды локального
       меню Assemble  (Ассемблирование)  области  Code  (Код)  окна  CPU
       (Центральный процессор).

            Control Break (клавиша Ctrl-Break)

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

            Trace (трассировка)

            Вы выполняете  с  помощью  клавиши  F7 или команды RunіTrace
       (ВыполнениеіТрассировка) трассировку по  одной  строке  исходного
       кода или машинной инструкции.

            Breakpoint at_ (точка останова на...)

            В вашей программе встретилась точка останова, которая приве-
       ла к ее остановке.  Текст после "at" представляет собой  адрес  в
       программе, где расположена точка останова.

            Terminated, exit code_ (выполнение прекращено,  код заверше-
            ния...)

            Ваша программа  завершила  выполнение.  Текст после "code" -
       это числовое значение кода завершения,  возвращаемого вашей прог-
       раммой DOS.  Если ваша программа не возвращает явное значение, то
       на экран может выводиться произвольное значение ("мусор").  Прог-
       рамму нельзя запустить, пока вы не перезагрузите ее с помощью ко-
       манды RunіProgram Reset (ВыполнениеіСброс программы).

            Loaded (загружена)

            Вы загрузили Турбо отладчик и задали программу  и  параметр,
       который  предотвращает  выполнение кода инициализации компилятора
       (sturtup code).  В этот момент никаких инструкций еще не выполне-
       но, включая те, которые управляют первоначальной установкой ваше-

       TDeb 3.0 #1-3               = 122 =

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

            Step (шаг)

            Вы выполняете программу по одной строке исходного  кода  или
       машинной инструкции,  пропуская вызовы функций (с помощью клавиши
       F8 или команды RunіStep (ВыполнениеіШаг)).

            Interrupt (прерывание)

            Вы нажали   клавишу   прерывания   (обычно    это    клавиши
       Ctrl-Break), чтобы получить управление. Ваша программа немедленно
       прерывает выполнение и управление получает отладчик.

            Exception_ (особая ситуация)

            Вы использовали TD386,  когда  встретилась  особая  ситуация
       процессора. Это обычно случается, когда программа пытается выпол-
       нить недопустимый для данного процессора код операции. В докумен-
       тации  по процессору Intel каждая особая ситуация описана подроб-
       но.

            Hardware deviсe driver stuck (конфликт с драйвером  аппарат-
            ного устройства отладки)

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

            Divide by zero (деление на ноль)

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

            Global breakpoint _ at__ (глобальная точка останова _ в _)

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



       TDeb 3.0 #1-3               = 123 =

                               Формат Windows
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы отлаживаете программу для Windows, то в блоке System
       Information будет выведена следующая информация:

            -  имя отлаживаемой программы;

            -  описание причин останова программы;

            -  информация о глобальной памяти в системе;

            -  текущая версия DOS;

            -  текущие дата и время.

                Й[*]ННННSystem InformationННННННННННННННННННН»
                єProgram: C:\TCW\TCWDEMO.EXE                 є
                єStatus: Window message breakpoint at wndprocє
                є                                            є
                є______Global Memory________                 є
                є                                            є
                є Mode    :       Non-EMS                    є
                є Banked  :            0Kb                   є
                є Not banked :    12006Kb                    є
                є Largest :       177Kb                      є
                є                                            є
                є                                            є
                є                                            є
                є DOS Version    : 5.00                      є
                є                                            є
                є 7-9-1991  12:45 pm                         є
                є               OK           Help            є
                є              ±±±±         ±±±±±            є
                ИННННННННННННННННННННННННННННННННННННННННННННј

            Рис. 5.5 Текстовое окно Windows Get Info

                    Сообщения, выводимые в строке состояния

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

            Stoped at_ (остановлена на...)

            Программа была  остановлена в результате выполнения одной из
       команд:  RunіExecute To,  RunіGo to Cursor или RunіUntil  Return.
       Это  сообщение  в строке состояния выдается также при первой заг-
       рузке программы, когда выполнен код начальной загрузки, сформиро-
       ванный  компилятором,  и  маркер  выполнения  установлен в начале
       текста программы.


       TDeb 3.0 #1-3               = 124 =

            No program loaded (программа не загружена)

            Турбо отладчик был запущен без какой-либо программы. Никакой
       код не может быть выполнен, пока не будет загружена программа или
       не будет  ассемблированы  некоторые  команды  с  помощью  команды
       Assemble локального меню области кода окна процессора (CPU).

            Trace (трассировка)

            Была выполнена одна строка исходного текста или машинная ко-
       манда по команде F7 (RunіTrace).

            Breakpoint at_ (точка останова в...)

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

            Window Message breakpoint at_ (точка останова  по  сообщению
            окна в _)

            Ваша программа  встретила  точку останова по сообщению окна,
       заданную для прерывания работы программы.  Текст после слова "at"
       - это оконная процедура, которой предназначено сообщение.

            Terminated, exit code_ (завершена, код выхода...)

            Работа программы завершена.  Текст после слова "code" предс-
       тавляет собой код выхода,  возвращаемый  программой  операционной
       системе DOS. Если программа не возвращает DOS какого-либо опреде-
       ленного значения, вместо кода выхода может отображаться какое-ли-
       бо не имеющее смысла число. Программа не может быть запущена, по-
       ка не  будет  загружена   заново   командой   RunіProgram   Reset
       (ВыполнениеіСброс программы).

            Loaded (загружена)

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

            Interrupt (прервана)

            Была нажата клавиша прерывания (обычно Ctrl-Alt-SysRq), что-
       бы  вернуть управление отладчику.  В этом случае работа программы
       немедленно прерывается, а управление передается отладчику.

            Exception_ (особая ситуация)


       TDeb 3.0 #1-3               = 125 =

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

            Divide by zero (деление на ноль)

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

            Global breakpoint _ at__ (глобальная точка останова _ в _)

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


                       Информация о глобальной памяти
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            TDW дает вам следующую информацию о глобальной памяти:

       Mode               Режимами памяти могут быть:  Large-frame   EMS
       (Режим)            (EMS-память  с  большим  размером  страничного
                          блока), Small-frame EMS  (EMS-память  с  малым
                          размером страничного блока),  или non-EMS (до-
                          полнительная память).

       Banked             Объем памяти в килобайтах выше линии банка EMS
       (Банкируемая)      (которая может  быть  откачана  в  расширенную
                          память, если ее использует система).

       Not Banked         Объем памяти в килобайтах ниже линии банка EMS
       (Не банкируемая)   (которая не может быть откачана в расширенную
                          память).

       Largest            Наибольший непрерывный блок памяти в  килобай-
       (Наибольший)       тах.


                                  Меню Run
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Меню Run  (Выполнение) содержит несколько параметров для вы-
       полнения различных частей вашей программы. Поскольку эти парамет-
       ры часто используются, им соответствуют функциональные клавиши.

       TDeb 3.0 #1-3               = 126 =


                 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДї
                 і Run                    F9 і  Выполнение
                 і Go to cursor           F4 і  Выполнение до курсора
                 і Trace into             F7 і  Трассировка
                 і Step over              F8 і  Шаг с пропуском
                 і Execute to...      Alt-F9 і  Выполнение до...
                 і Until return       Alt-F8 і  Выполнение до возврата
                 і Animate...                і  Автоматизировать
                 і Back trace         Alt-F4 і  Обратная трассировка
                 і Instruction trace  Alt-F7 і  Трассировка инструкций
                 ГДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
                 і Arguments...              і  Аргументы
                 і Program reset     Ctrl-F2 і  Сброс программы
                 АДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ




       TDeb 3.0 #1-3               = 127 =

                              Команда Run [F9]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Run  (Выполнение) запускает вашу программу на выпол-
       нение. При наступлении одного из следующих событий управление пе-
       редается отладчику.

            - ваша программа завершила выполнение;

            - обнаружена точка останова с действием прерывания;

            - вы прервали выполнение с помощью клавиш Ctrl-Break.


                          Команда Go to Cursor [F4]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Go to Cursor (Перейти к курсору) выполняет программу
       до  той строки,  где находится курсор (в текущем окне Module (Мо-
       дуль) или области Code окна CPU  (Центральный  процессор)).  Если
       текущим  окном является окно Module,  курсор должен находиться на
       строке исходного кода внутри функции.


                           Команда Trace Into [F7]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Турбо отладчик интерпретирует методы объектов и функции-эле-
       менты классов,  как все другие процедуры и  функции.  Клавиша  F7
       позволяет трассировать их исходный код (если он доступен).

                           Команда Step Over [F8]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Step Over (Шаг с пропуском)  выполняет  одну  строку
       исходного кода или машинную инструкцию, минуя трассировку вызыва-
       емой процедуры или функции.  При  этом  обычно  выполняется  одна
       строка исходного текста программы.

            Однако, если текущим окном является окно CPU (ЦП), то выпол-
       няется только одна машинная инструкция.

            Если вы выполняете эту команду для  одной  исходной  строки,
       Турбо  отладчик  интерпретирует любой вызов процедуры или функции
       на этой строке, как часть самой строки, поэтому при завершении вы
       не окажетесь в начале одной из этих функций.  Вместо этого вы пе-

       TDeb 3.0 #1-3               = 128 =

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

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

            CALL            Вызов подпрограммы (ближний или дальний).
            INT             Вызов прерывания.
            LOOP            Управление циклом (CX - счетчик).
            LOOPZ           Управление циклом (CX - счетчик).
            LOOPNZ          Управление циклом (CX - счетчик).

            Шаг с  пропуском выполняется также для префиксов REP,  REPNZ
       или REPZ,  за которыми следуют  инструкции  CMPS,  CMPSW,  LODSB,
       MOVS, MOVSB, MOVSW, SCAS, SCASB, SCASW, STOS, STOSB или STOSW.

            Шаг с  пропуском выполняется также для префиксов REP,  REPNZ
       или REPZ,  за которыми следуют  инструкции  CMPS,  CMPSW,  LODSB,
       MOVS, MOVSB, MOVSW, SCAS, SCASB, SCASW, STOS, STOSB или STOSW.

            Команда RunіStep Over (ВыполнениеіШаг с пропуском) интерпре-
       тирует вызов  метода  объекта или функцию-элемент класса как один
       оператор,  м выполняет для него шаг с пропуском,  как  при  любом
       другом вызове процедуры или функции.

                       Команда Execute To... [Alt-F9]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Execute To (Выполнение до...) выполняет  вашу  прог-
       рамму до адреса, который вы ввели в ответ на подсказку в диалого-
       вом окне.  Программа может не достичь этого адреса, если встреча-
       ется точка останова или вы прерываете выполнение.

                        Команда Until Return [Alt-F8]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Until Return (Выполнение до возврата управления) вы-
       полняет текущую процедуру или функцию,  пока она не возвратит уп-
       равление вызывающей программе.  Это полезно использовать при двух
       обстоятельствах:  если вы случайно вошли в процедуру или функцию,
       выполнение  которой  вас  не  интересует   (с   помощью   команды
       RunіTrace (ВыполнениеіТрассировка)  вместо  команды RunіStep (Вы-
       полнениеіШаг)),  или когда вы определили, что текущая функция ра-
       ботает правильно,  и не хотите медленно проходить  ее  оставшуюся
       часть.

                             Команда Animate...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Animate...  (Автоматизировать) выполняет непрерывную

       TDeb 3.0 #1-3               = 129 =

       последовательность команд Trace (Трассировка).  Это позволяет вам
       наблюдать  за  текущим адресом в исходном коде и видеть изменение
       значений переменных. Прервать выполнение данной команды можно на-
       жатием любой клавиши.

            После выбора  команды  RunіAnimate (ВыполнениеіАвтоматизиро-
       вать) вам  выведется  подсказка для ввода значения интервала вре-
       менной задержки между последовательными трассировками  (в десятых
       долях секунды). По умолчанию используется значение 3.

                             Команда Back Trace
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы выполняете трассировку программы (с помощью операти-
       вных клавиш F7 или Alt-F7),то данная команда изменяет порядок вы-
       полнения на обратный.  Это средство удобно использовать,  если вы
       проскочили место предполагаемой ошибки и хотите вернуться  к этой
       точке. Данная команда позволяет вам выполнить программу "в обрат-
       ном порядке" по шагам или до заданной (подсвеченной) точки в  об-
       ласти инструкций окна Execution History (Протокол выполнения).

                 Предупреждение: Здесь  имеются  некоторые  ограничения.
           См. раздел "Область инструкций".

                     Команда Instruction Trace [Alt-F7]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Instruction Trace (Трассировка инструкций) выполняет
       одну инструкцию. Ее можно использовать, когда вы хотите трассиро-
       вать прерывание, или когда вы находитесь в окне Module (Модуль) и
       хотите выполнять трассировку процедуры или функции, которая нахо-
       дится в модуле без отладочной информации  (например, библиотечной
       подпрограмме).

            Так как  вы  больше не будете находиться в начале строки ис-
       ходного теста, эта команда обычно переводит вас в окно CPU (Цент-
       ральный процессор).

                            Команда Arguments...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                       Команда Program Reset [Ctrl-F2]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Program Reset (Сброс программы) перезагружает  отла-
       живаемую вами программу с диска.  Ее можно использовать в следую-
       щих случаях:

            - когда выполнение "зашло слишком далеко",  то есть пройдено
              то место, где имеется ошибка;

       TDeb 3.0 #1-3               = 130 =


            - когда  ваша  программа завершила работу и вы хотите запус-
              тить ее снова;

            - если вы работаете в  окне  CPU,  приостановили  выполнение
              программы с помощью Ctrl-Alt-SysRq и хотите завершить ее и
              начать сначала.

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

            Если вы находитесь в окне Module или CPU,  то отладчик уста-
       навливает маркер текущей строки на начало программы, но экран ос-
       тается там,  где вы были при выборе команды Program Reset  (Сброс
       программы).  Такое  поведение  облегчает  установку курсора на то
       место, где вы были, и выполнение программы до данной строки.

            Если вы выбрали команду Program  Reset  только  потому,  что
       зашли  на один оператор дальше нужного места,  вы можете перемес-
       тить курсор в файле исходного кода вверх на несколько строк и на-
       жать клавишу F4, чтобы выполнить программу до этого места. В про-
       тивном случае вы  можете  (если  с  помощью  окна  ViewіExecution
       History  включено средство полного протоколирования Full History)
       выбрать вместо команды Program Reset (Сброс программы) для  возв-
       рата к ранее выполненному коду команду RunіBack Trace (Выполнение
       іОбратная трассировка).



       TDeb 3.0 #1-3               = 131 =

                           Окно Execution History
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                ХННExecution historyНННННННННННННН3ННН[ ][ ]НН»
                є7229:04F5: push ax                           є
                є7229:04F6: push bp                           є
                є7229:04F7:°call°°°TCDEMO.PROCESSLINE.ISLETTERє
                є<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>є
                єTrace TPDEMO.122:  while i <= Length(S) do   є
                єTrace TPDEMO.125:  while (i <= Length(S)   anє
                єTrace TPDEMO.PROCESSLINE.ISLETTER: begin     є
                АНННННННННННННННННННННННННННННННННННННННННННННЩ

            Рис. 5.6 Окно Execution History

            В окне Execution History (Протокол выполнения), которое отк-
       рывается по команде ViewіExecution History (ОбзоріПротокол выпол-
       нения) вы можете просмотреть протокол выполнения.

            Данное окно содержит две области:  область инструкций (ввер-
       ху) и область записи клавиш (нижняя область).


                             Область инструкций
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В области инструкций выводятся инструкции,которые уже выпол-
       нены и которые вы можете отменить. Выбрать нужную инструкцию мож-
       но, перемещая полосу (строку) подсветки.

            В протоколе выполнения отслеживаются только инструкции,  ко-
       торые выполняются по  команде  Trace  Into  (Трассировка  вглубь)
       (клавиша F7) или Instruction Trace (Трассировка инструкций) (кла-
       виши Alt-F7).  Если вы не встретите ни одну из перечисленных выше
       (в предыдущих разделах) команд,  там отслеживаются также инструк-
       ции, выполняемые по команде Step  Over  (Шаг  с  пропуском).  Как
       только  вы  используете  команду  Run (Выполнение) или выполняете
       прерывание,  протокол инструкций удаляется. (Когда вы вернетесь к
       трассировке, инструкции снова будут фиксироваться.)

            Обратную трассировку вызова прерывания выполнять нельзя.


       TDeb 3.0 #1-3               = 132 =

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

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


                      Локальное меню области инструкций
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

                                 ЪДДДДДДДДДДДДДДДДДДДДДДДДДДї
            Проверка             і Inspect                  і
            Обратное выполнение  і Reverse execute          і
                                 ГДДДДДДДДДДДДДДДДДДДДДДДДДДґ
            Полный протокол      і Full history          No і
                                 АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Локальное меню области инструкций содержит три команды.


                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка) перемещает вас к команде, подсве-
       ченной в области инструкций.  Если это строка исходного кода, вам
       показывается эта строка в окне Module (Модуль). Если нет исходно-
       го кода, то открывается окно CPU (ЦП) и инструкция подсвечивается
       в области кода.

                      Команда Reverse Execute [Alt-F4]
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данная команда (можно также использовать оперативные клавиши
       Alt-F4) выполняет программу в обратном порядке до того места, ко-
       торое подсвечено в области инструкций. Если вы выбрали строку ис-
       ходного кода, то вы возвращаетесь в окно Module, в противном слу-
       чае выводится  окно CPU (ЦП) с подсветкой на инструкции в области
       кода.

                 Предупреждение: Вы не можете выполнять в  обратном  по-
            рядке ту часть программы, которую вы не трассировали. Напри-
            мер,  если вы установите точку останова и затем нажмете кла-
            вишу F9, чтобы выполнить программу до точки останова, то ваш
            протокол выполнения будет потерян. В этом случае для восста-
            новления  ситуации можно использовать средство повторной от-
            работки нажатых клавиш (окна Execution History).  Для  этого
            нужно перезагрузить  программу и выполнить ее до данной точ-
            ки.

                 Предупреждение: Инструкция INT приводит к потере преды-
            дущего протокола выполнения. Вы не можете выполнить эту инс-

       TDeb 3.0 #1-3               = 133 =

            трукцию  в обратном порядке,  если не использовалась трасси-
            ровка прерывания (клавиши Alt-F7).

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

                     IN                       INSW
                     OUT                      OUTSB
                     INSB                     OUTSW

                   Команда Full History (Полный протокол)
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Это команда-переключатель.  Если она установлена в состояние
       On (Включено), то обратная трассировка разрешена. В состоянии Off
       (Выключено) обратная трассировка запрещена.

                     Область регистрации нажатий клавиш
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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

            Регистрацию последовательности  нажатий клавиш разрешает па-
       раметр командной строки -k. Для того, чтобы он по умолчанию уста-
       навливался  в  значение  On (Включено),  можно также использовать
       утилиту TDINST.

              Локальное меню области регистрации нажатий клавиш
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


       TDeb 3.0 #1-3               = 134 =

                                               ЪДДДДДДДДДДДДДДДДДДДї
                 Проверка                      і Inspect           і
                 Восстановление нажатий клавиш і Keystroke restore і
                                               АДДДДДДДДДДДДДДДДДДДЩ



       TDeb 3.0 #1-3               = 135 =

                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы переведете подсветку на строку в области регистрации
       нажатий клавиш,  а затем  выберите  из  локального  меню  команду
       Inspect (Проверка),  то выводится окно Module (Модуль),  курсор в
       котором установлен на той строке исходного кода,  где была нажата
       клавиша.

            Если данная  строк (в области регистрации нажатий клавиш) не
       соответствует позиции в исходном  коде,  то  выводится  окно  CPU
       (ЦП), подсветка в котором позиционирована на инструкции.

                          Команда Reystroke Restore
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы подсветите строку в области регистрации нажатий кла-
       виш,  а  затем выберите команду Кeystroke Restore (Восстановление
       нажатий клавиш),  то Турбо отладчик перезагрузит вашу программу и
       запустит ее до выделенного (подсвеченного) контекста. Это особен-
       но полезно использовать,  когда вы выполнили команду Турбо отлад-
       чика, которая удалила протокол выполнения.

                       Прерывание выполнения программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

                             Клавиши Ctrl-Break
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

          - вы попали в цикл, когда запрещены прерывания;

       TDeb 3.0 #1-3               = 136 =


          - произошел сбой системы из-за выполнения ошибочного кода.

            Если вы отлаживаете программу, которая сама должны обрабаты-
       вать клавиши Ctrl-Break,  вы можете сменить  клавишу  прерывания.
       Для этого можно воспользоваться программой TDINST.  Значение кла-
       виши прерывания можно присвоить любой обычной клавише  (она будет
       действовать в сочетании с клавишей Ctrl).

                      Завершение работы вашей программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Когда ваша программа завершает работу, и вы из нее выходите,
       отладчик снова получает управление. Он выводит сообщение, показы-
       вающее код завершения вашей программы, который будет возвращаться
       в DOS.  Когда ваша программа завершила работу, до ее перезагрузки
       с  помощью команды RunіProgram Reset (ВыполнениеіСброс программы)
       вы не можете воспользоваться ни одной из команд меню Run  (Выпол-
       нение).

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

                        Возобновление сеанса отладки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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

                           Перезагрузка программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Чтобы перезагрузить отлаживаемую программу,  используйте ко-
       манду  RunіProgram Reset (ВыполнениеіСброс программы).  Турбо от-
       ладчик перезагружает программу с диска со всеми  данными, которые
       вы  могли добавить с момента последнего сохранения на диске.  Это
       наиболее надежный способ перезапуска программы. Возобновление пу-
       тем  выполнения  с  начала  программы рискованно,  так как многие
       программы ожидают инициализации данных с образа программы на дис-

       TDeb 3.0 #1-3               = 137 =

       ке.

            Заметим, что команда Program Reset (Сброс программы)  остав-
       ляет точки останова и выражения просмотра в неприкосновенности.

        Запись нажатий клавиш в макрокоманду и повторная их отработка
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

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

            Первое, что  вы должны сделать после запуска Турбо отладчика
       из DOS для записи всего сеанса отладки, - это определение клавиа-
       турной   макрокоманды.   Для   этого   нужно   выбрать    команду
       OptionsіMacrosіCreate (ПараметрыіМакрокомандыіСоздание).  Вам вы-
       ведется подсказка с запросом нажать клавишу,  которой будет прис-
       воена  макрокоманда.  Выберите клавишу,  которой еще не присвоена
       функция, например Shift, и одну из функциональных клавиш, скажем,
       Shift-F1.  Теперь выполняйте вашу программу до момента ошибки.

                 Примечание: Не  используйте для завершения макрокоманды
            команду MacrosіStop Recording  (МакрокомандыіОстановить  за-
            пись).

            В этой точке завершите запись  макрокоманды,  нажав  клавиши
       Alt-минус  (или  клавишу,  которой вы присваиваете макрокоманду).
       Теперь сохраните макрокоманду на диске с помощью команды Optionsі
       Save Recording (ПараметрыіСохранить запись).  Продолжите выполне-
       ние вашей программы. После сбоя вашей программы и ее перезагрузки
       с  Турбо  отладчиком для возобновления программы можно просто на-
       жать клавиши Shift-F9.

            Если в вашей программе для того, чтобы перейти к нужно части
       кода, нужно что-то вводить, вам придется вводить это вручную. (Вы
       можете сделать  это  во время работы макрокоманды.) Для программ,
       не требующих ввода,  механизм записи клавиш позволяет автоматизи-
       ровать процедуру возобновления полностью.

       TDeb 3.0 #1-3               = 138 =


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



       TDeb 3.0 #1-3               = 139 =

                    Загрузка новой программы для отладки
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Новую программу для отладки можно загрузить с помощью коман-
       ды FileіLoad (ФайліЗагрузка).  Вы можете использовать трафаретные
       символы DOS для вывода списка файлов для выбора,  либо ввести имя
       конкретного  файла.  Если в ответ на подсказку вы нажмете клавишу
       Enter,  то выведется список всех файлов .EXE в текущем  каталоге.
       Переместите подсветку на имя того файла, который вы хотите загру-
       зить, и нажмите Enter.

            Й[*]НННННННННННННННEnter program to loadННННННННННННН»
            є File name                                          є
            є°*.exe°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°  OK    є
            є                                             ±±±±±± є
            є Files                    Directories        Cancel є
            є bildsp.exe               pepper             ±±±±±± є
            є donothih.exe             td                  Help  є
            є dototal.exe              tdold              ±±±±±± є
            є drwhappy.exe                                       є
            є echo.exe                                           є
            є hello.exe                                          є
            є tittle.exe                                         є
            є mytest.exe                                         є
            є pwrs.exe                                           є
            є reserve.exe                                        є
            є small.exe                                          є
            є tcdemo.exe                                         є
            є                                                    є
            єG:\NETFILES\DEBUG\PROGRAM\*.EXE                     є
            єBILDSP.EXE       Feb  19,1988 2:23pm   4592 bytes   є
            ИННННННННННННННННННННННННННННННННННННННННННННННННННННј

            Рис. 5.7 Диалоговое окно Load Program (Загрузка программы)

            Enter program name to load - введите имя программы для  заг-
       рузки; File name - имя файла;  Files - файлы; Directories - ката-
       логи; OK - выбор; Cancel - отмена; Help - справка.

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

            Передать аргументы отлаживаемой программе можно, поместив их
       после имени программы, также, как вы делаете это в ответ на подс-
       казку DOS, например:

                 myprog a b c

            При этом загрузится программа MyProg с тремя аргументами ко-
       мандной строки (a, b и c).


       TDeb 3.0 #1-3               = 140 =

                       Изменение аргументов программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы забыли указать для своей программы необходимые аргу-
       менты при ее загрузке,  то для задания или  изменения  аргументов
       можно использовать  команду RunіArguments (ВыполнениеіАргументы).
       Введите новые аргументы в том порядке,  в котором они указываются
       после задания имени программы в ответ на подсказку DOS.

            Когда вы  введете  новые аргументы,  Турбо отладчик запросит
       вас, хотите ли вы перезагрузить программу с диска. Обычно следует
       отвечать Yes (Да), так как в большинстве программ новые аргументы
       будут действовать только если вы загрузите программу сначала.



       TDeb 3.0 #1-3               = 141 =

                    Глава 6. Анализ и модификация данных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В Турбо  отладчике предусмотрен уникальный и понятный способ
       для работы с данными вашей программы.

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

            - Вы  можете также поместить в окно Watches (Просмотр) пере-
              менные и выражения и наблюдать за изменением  их  значений
              по мере выполнения программы.

            - Диалоговое  окно  Evaluate/Modify (Вычисление/Модификация)
              показывает содержимое любой  переменной  и  позволяет  вам
              присвоить ей новое значение.

            В данной главе предполагается,что вы уже знакомы с различны-
       ми типами данных,  которые могут встречаться в используемом  вами
       языке  (С++, Паскале или Ассемблере).  Если вы работаете с языком
       недавно и еще не усвоили все типы данных,  то в данной главе име-
       ется  также  много  ценной  информации  об  основных типах данных
       (char,  int,  integer,  boolean, real, с двойной и одинарной точ-
       ностью,  с  плавающей точкой,  строковых,  длинных целых и т.д.).
       Когда вы подробнее познакомитесь с  используемыми  типами  данных
       (освоите указатели, записи, структуры, объединения и т.д.), можно
       вернуться к данной главе и подробнее изучить,  что можно делать с
       ними с помощью Турбо отладчика.

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

                 Примечание: Если  вы  хотите просматривать или изменять
            произвольные блоки памяти  (в  виде  байт  шестнадцатиричных
            данных),  см.  Главу  11,  где  рассказывается об отладке на
            уровне Ассемблера.

                                  Меню Data
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Меню Data  (Данные)  позволяет  вам выбрать способ анализа и
       изменения данных программы.  Вы можете вычислить выражение, изме-
       нить  значение переменной и открыть окна проверок (Inspector) для

       TDeb 3.0 #1-3               = 142 =

       вывода содержимого данных на экран.

              ЪДДДДДДДДДДДДДДДДДДДДДДДДДДї
              і Inspect...               і    Проверка
              і Evaluate/Modify...Ctrl-F4і    Вычисление/Модификация
              і Add Watch...      Ctrl-F7і    Добавление выражения прос-
              і Function return          і    мотра
              АДДДДДДДДДДДДДДДДДДДДДДДДДДЩ    Возврат результата функции


                             Команда Inspect...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка) выводит подсказку с запросом  пе-
       ременной,  ссылающейся на данные,  которые вы хотите проверить, а
       затем открывает окно Inspector (окно проверки), где выводится со-
       держимое  переменной  программы или выражения.  Вы можете вводить
       простое имя переменной,  или сложное выражение,  если только  оно
       ссылается на ячейку памяти и не сводится к константе.

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

            Когда вы  хотите  проверить содержимое сложных структур дан-
       ных, таких, как массивы или структуры, или связанный список запи-
       сей, окна проверки могут вам очень помочь. Так как вы можете про-
       верять данные внутри окна Inspector  (Проверка),  то  "проходить"
       структуры  данных  программы можно также легко,  как пролистывать
       исходный код программы в окне Module (Модуль).

            Полное описание поведения окон Inspector содержится  далее в
       разделе "Окна Inspector".

                          Команда Evaluate/Modify...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Evaluate/Modify   (Вычисление/Модификация)   выводит
       подсказку (диалоговое окно) для ввода вычисляемого выражения (см.
       Рис. 6.1),  затем вычисляет его (если вы выберите "кнопку" Eval -
       вычисление) так же,  как это сделал бы компилятор. Вычисление вы-
       ражений полностью обсуждается в Главе 9.

            Если при  вводе  данной  команды  курсор находится в области
       текста, то в подсказке будет автоматически содержатся переменная,
       расположенная в том месте,  где находится курсор (если она имеет-
       ся).  Если вы помечаете выражение с помощью клавиши Ins, то подс-
       казка (диалоговое окно) инициализируется отмеченным выражением.

       TDeb 3.0 #1-3               = 143 =


            ЙННННННННННННННEvaluate/ModifyННННННННННННННННННННННН»
            є Expression                                 Eval    є
            є °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°   ±±±±±±  є
            є °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°           є
            є                                            Cancel  є
            є Result                                     ±±±±±±  є
            є °°°°°°°°°°°°°°°°°°°°°°°°°   Help    є
            є                                            ±±±±±±  є
            є New value                                  Modify  є
            є °°°°°°°°°°°°°°°°°°°°°°°°°   ±±±±±±  є
            є °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°           є
            є °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°           є
            є                                                    є
            ИННННННННННННННННННННННННННННННННННННННННННННННННННННј

            Рис. 6.1 Диалоговое окно Evaluate/Mofify

            Expression - выражение;  Result - результат; New value - но-
       вое значение;  not avaliable  -  недоступно;  Eval  -  вычислить;
       Cancel - отменить; Help - справка; Modify - модифицировать.

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

            Диалоговое окно содержит три области (поля).

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

            Запись в поле ввода New Value (Новое значение)  будет  дейс-
       твовать, если вы выберите "кнопку" Modify (Модификация).

            Если строки данных слишком велики и не умещаются в поле  ре-
       зультата, то они заканчиваются символом >. "Прокрутив" окно впра-
       во, вы можете просмотреть остаток строки.

       TDeb 3.0 #1-3               = 144 =

            Если вы выполняете отладку объектно-ориентированных программ
       на языке C++ или Паскале, то диалоговое окно Evaluate/Modify поз-
       воляет вам также вывести поля  объекта  или  элементы  реализации
       класса.  Для  каждого элемента,  который может использоваться при
       вычислении записи, можно использовать спецификатор формата.

            При выполнении трассировки метода или функции элементов Тур-
       бо отладчик  знает  об  области  действия  и  наличии   параметра
       Self/this. C  помощью  спецификаторов и квалификаторов формата вы
       можете вычислить параметр Self/this (данный).

            Турбо отладчик позволяет  также  вызывать  метод  или  функ-
       цию-элемент прямо из диалогового окна Evaluate/Modify (Вычисление
       /Модификация).  Для этого просто наберите имя реализации  метода,
       за которым следует точка,  а затем имя метода или функции-элемен-
       та с фактическими параметрами (либо пустые скобки,  если парамет-
       ров нет). При следующих описаниях:

            type
              Point = object
                X, Y    : Integer;
                Visible : Boolean;
                constructor Init(InitX, InitY : Integer);
                destructor Done; virtual;
                procedure  Show; virtual;
                procedure  Hide; virtual;
                procedure  MoveTo(NewX, NewY, : integer);
            end;

            var
               APoint : Point;

       вы могли  бы  ввести  в  окне вычисления Турбо отладчика любое из
       следующих выражений:

            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
            Выражение                      Результат
            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
            APoint.X                       5($5):Integer
            APoint                         (5,23,FALSE):Point
            APoint.MoveTo                  @6F4F:00BE
            APoint.MoveTo(10,10)           вызывается метод
                                           MoveTo
            APoint.Show()                  вызывается метод
                                           Show
            ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


       TDeb 3.0 #1-3               = 145 =

            Выражение с побочными эффектами при вычислении изменяет зна-
       чение одной или более переменных или областей памяти. Этот эффект
       имеют,  например, операции увеличения или уменьшения языка Си (++
       и --) и операции присваивания (=,  += и т.д.). Если в своей прог-
       рамме   вы   в   выражениях   Си  выполняете  функции  (например,
       mufunc(2)),  то ваша функция может иметь неожиданные побочные эф-
       фекты.

            Если вы не собираетесь модифицировать значения переменных, а
       просто хотите вычислить выражение,  содержащее некоторые из пере-
       менных программы,  то не используйте тех операций,  которые имеют
       побочные эффекты.  С другой стороны,  побочные эффекты могут дать
       быстрый и удобный способ изменения значения переменной или облас-
       ти памяти. Например, чтобы добавить 1 к значению вашей переменной
       с именем count, вычислите выражение Си count++.

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

                              Команда Add Watch...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Add  Watch  (Добавление выражения просмотра) выводит
       подсказку для ввода выражения просмотра, а затем (если вы нажмете
       клавишу Enter  или  выберите  "кнопку" OK) помещает выражение или
       переменную программы в список переменных,  выводимых в окне Watch
       (Просмотр).

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

                          Команда Function Returns
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            По команде Function Returns (Результаты  функции)  выводится
       возвращаемое текущей  функцией значение.  Используйте эту команду
       только тогда,  когда функция собирается передать значение в вызы-
       вающую программу.

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

            Данная команда  позволяет вам не переходить в окно CPU (ЦП),
       когда требуется просмотреть возвращаемое через регистры процессо-
       ра значение.  Кроме того, поскольку вы примерно знаете тип данных
       и формат возвращаемого значения,  их намного легче  использовать,
       чем шестнадцатиричный дамп.


       TDeb 3.0 #1-3               = 146 =

                 Ссылка на элементы данных в исходных файлах
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Вы можете также выбрать проверяемое выражение с помощью  на-
       жатия клавиши  Ins и использования клавиш управления курсором для
       его подсветки (выделения),  а затем выбрать команду Inspect (Про-
       верка).

                 Примечание: Полное  описание  использования окон Module
            (Модуль) содержится в Главе 8.



       TDeb 3.0 #1-3               = 147 =

                                Окно Watches
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно наблюдения Watches  (Просмотр)  позволяет  вам  вывести
       список переменных и выражений программы,  значения которых вы хо-
       тите отслеживать. Вы можете наблюдать значение простой переменной
       (например,  целой),  а  также сложных элементов данных (например,
       массивов).  Кроме того вы можете видеть значение вычисляемого вы-
       ражения, которое не ссылается непосредственно ни на какой адрес в
       памяти, например x * y + 4.

       Й[*]НННWatchesНННННННННННННННННННННННННННННННННННННННН2НН[ ][ ]Н»
       єwordcount               unsigned int 8 (Ox8)                   ^
       єwordcounts              unsigned int [10] {1,2,4,6,1,1,2,0,0,0}І
       єlettersinfo struct linfo [26] {(4,2),(1,1),(0,0),(1,1),(7,0),(.°
       єnlines*nwords±±±±unsigned±int±24±±(Ox22)±±±±±±±±±±±±±±±±±±±±±±±°
       єtotalcharacters         unsigned long 88L (Ox42)               v
       И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>ДЩ

            Рис. 6.2 Окно Watches

            Для создания окна Watches выберите команду ViewіWatches (Об-
       зоріПросмотр).  В нем выводится список переменных, значения кото-
       рых  вы  хотите просматривать.  Для каждой записи слева выводится
       имя переменной или выражение и тип данных,  а справа -  значение.
       Составные  значения (такие,  как массивы или структуры) выводятся
       со значениями,  заключенными в фигурные скобки ({ }) для программ
       на языке Си и в круглые скобки - на Паскале. Если не хватает мес-
       та для того, чтобы вывести выражение целиком, то оно усекается.

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

                 Примечание: Полное описание области  действия выражений
            и  допустимости  переменной или параметра содержится в Главе
            9.

                 Предупреждение: Если вы ошибетесь при вводе имени пере-
            менной, эта ошибка обнаружена не будет, так как Турбо отлад-
            чик вычисляет выражения в окне  Watches  (Просмотр)  относи-
            тельно  области  действия,  того  места в программе,  где вы
            остановились.

            Если вы  не  используете  механизм  переопределения  области
       действия, о котором  рассказывается в Главе 9, Турбо отладчик вы-
       числяет вычисляет выражения в окне наблюдения Watches в соответс-
       твии с областью действия текущего адреса, на котором остановилась
       программа.  Следовательно, выражения в окне Watches имеют то зна-
       чение, которое соответствует текущему месту в программе. Если вы-

       TDeb 3.0 #1-3               = 148 =

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

            При выполнении трассировки внутри метода объекта  вы  можете
       добавить в окно Watches параметр Self/this.


                         Локальное меню окна Watches
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                    ЪДДДДДДДДДДДДДДДї
                    і Watch...      і              Просмотр
                    і Edit...       і              Редактирование
                    і Remove        і              Удаление
                    і Delete All    і              Удалить все
                    ГДДДДДДДДДДДДДДДґ
                    і Inspect       і              Проверка
                    і Change        і              Изменение
                    АДДДДДДДДДДДДДДДЩ


                              Команда Watch...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Watch (Просмотр) выводит подсказку для  ввода  имени
       переменной  или  выражения,  чтобы  добавить  его  к  списку окна
       Watches (оно добавляется в конец списка).


                               Команда Edit...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Edit  (Редактирование) позволяет редактировать выра-
       жение в окне Watches (Просмотр).  Вы можете изменять то,  что там
       находится или вводить новое значение.

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


                               Команда Remove
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


       TDeb 3.0 #1-3               = 149 =

            Команда Remove  (Удаление)  удаляет  из окна Watches текущую
       выбранную запись.


                             Команда Delete All
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Delete All (Удалить все)  удаляет  из  окна  Watches
       (Просмотр) все записи.  Эту команду полезно использовать, если вы
       переходите от одной области вашей программы к другой,  и перемен-
       ные, наблюдаемые ранее, вам больше не нужны.

                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка)  открывает  окно  проверки  (окно
       Inspector),  в котором выводится содержимое подсвеченной в данный
       момент в окне Watches записи.  Если эта запись представляет собой
       сложный объект (массив,  структуру или запись),  то это позволяет
       вам просмотреть все ее элементы, а не только те, которые выводят-
       ся  в окне Watches (Просмотр).  (Более подробно об окне Inspector
       рассказывается далее.)

                               Команда Change
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

             Команда Change (Изменение) изменяет значение подсвеченной в
       данный момент записи в окне Watches (Просмотр) на значение, кото-
       рое  вы вводите в ответ на подсказку.  Если это допускается в ис-
       пользуемом языке, Турбо отладчик выполняет все необходимые преоб-
       разования типов,  как это делалось бы в соответствующем операторе
       присваивания (= или :=).  Более подробно об операции присваивания
       и преобразовании (приведении) типов рассказывается в Главе 9.

                               Окна Inspector
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне Inspector (Проверка) выводятся соответствующим  обра-
       зом  (в зависимости от типа проверяемых данных) данные программы.
       Для скалярных значений (например, char или int), указателей (char
       *  в  Cи,  ^  в Паскале),  массивов (long x4[],  array [1..10] of
       words),  функций,  структур, записей, объединений и множеств окна
       проверки ведут себя по-разному.

            В окне Inspector выводится список элементов, входящих в исс-
       ледуемый объект данных.  В заголовке окна выводится тип проверяе-
       мых данных и их имя, если оно имеется.

            Первый элемент  в  окне  Inspector всегда представляет собой
       адрес памяти проверяемого  элемента  данных,  выраженный  в  виде
       "сегмент:смещение" (если  он  не  оптимизирован к регистру или не
       представляет собой константу, например, 3).


       TDeb 3.0 #1-3               = 150 =

            Чтобы анализировать  содержимое  окна Inspector (Просмотр) в
       виде непосредственных байт данных,  будучи в окне Inspector выбе-
       рите команду ViewіDump (ОбзоріДамп).  При этом появится окно Dump
       (Дамп) с областью данных, позиционированной на данные, выведенные
       в  окне Inspector.  Вы можете вернуться в окно Inspector,  выбрав
       окно с помощью команды WindowіClose  (ОкноіЗакрытие)  или  клавиш
       Alt-F3, либо закрыв окно с помощью кнопки "мыши".

            В следующем  разделе  описываются  различные окна Inspector,
       которые могут выводиться для каждого из поддерживаемых Турбо  от-
       ладчиком языков (Си,  Паскаля или Ассемблера). Формат информации,
       выводимой в окнах проверки,  зависит от используемого языка. Эле-
       менты данных и из значения всегда выводятся в формате,  аналогич-
       ном тому, как они описываются в исходном файле.

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



       TDeb 3.0 #1-3               = 151 =

                           Окна Inspector языка Си
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Далее следует описание содержимого окон.


                             Скалярные величины
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Скалярное окно Inspector (Проверка)  позволяет  вам  увидеть
       значение простых элементов данных, таких, как:

               char x = 4;
               unsigned long y = 123456L;

            В этих окнах Inspector содержится только одна строка  инфор-
       мации,  следующая за верхней строкой, где описывается адрес пере-
       менной.  Слева выводится тип скалярной переменной (char, unsigned
       long  и т.д.),  а справа - ее значение в данный момент.  Значение
       может выводиться в десятичном, шестнадцатиричном или обоих видах.
       Оно обычно выводится сначала в десятичном виде, а шестнадцатирич-
       ное значение указывается в скобках (с помощью стандартного  шест-
       надцатиричного  префикса Си Ox).  Для изменения вида вывода можно
       использовать программу TDINST.

           Если выводится переменная символьного типа (char), то показы-
       вается  также  ее символьный эквивалент.  Если данное значение не
       имеет эквивалента в виде печатаемого символа,  то для вывода сим-
       вольного значения используйте обратную косую черту (\),  за кото-
       рой следует шестнадцатиричное значение. Символьное значение выво-
       дится перед десятичным или шестнадцатиричным значением.

                     Й[*]НInspecting wordcountНННН3Н[ ][ ]Н»
                     є05A51:AA00                           є
                     єunsigned±int±±±±±±±±2±±(Ox02)±±±±±±±±є
                     И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>Ѕ

            Рис. 6.3 Cкалярное окно Inspector языка Си

                                  Указатели
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector (Проверка) для указателей показывает значение
       элементов  данных,  которые  ссылаются на другие элементы данных,
       например:

               char *p   = "abs";
               int  *ip  = 0;
               int  **ip = &ip;

            Обычно окно Inspector для указателей  содержит  только  одну
       строку информации, следующую за верхней строкой, в которой описы-
       вается адрес переменной. Слева выводится [0], показывающий первый

       TDeb 3.0 #1-3               = 152 =

       элемент массива.  Справа выводится значение элемента,  на который
       делается ссылка. Если значение представляет собой сложный элемент
       данных (например,  структуру или массив), то выводится максимально
       возможное число элементов данных, а значения заключаются в фигур-
       ные скобки ({ и }).

            Если указатель типа char и ссылается на завершающуюся  нуле-
       вым  символом символьную строку,  то появляется больше информации
       (показывается значение  каждого  элемента  символьного  массива).
       Слева  от  каждой  строки указывается индекс массива ([1],  [2] и
       т.д.),  а справа выводится значение (так же, как в скалярном окне
       Inspector).  В  этом  случае в верхней строке выводится также вся
       строка,  а также адрес переменной и адрес строки,  на которую она
       ссылается.

                    Й[*]НInspecting bufpННННННН3ННН[ ][ ]НННН»
                    єregister±±ds:0874±[TCDEMO±buffer]±±±±±±±^
                    є[0]                      'n' 110 (Ox88) ±
                    є[1]                      '0' 111 (Ox6F) °
                    є[2]                      'w' 119 (Ox77) °
                    є[3]                     '\x00' 0 (Ox00) v
                    є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                    єchar *                                  є
                    ИННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.4 Окно Inspector для указателей (для языка Си)

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

            int array[10];
            int *arrayp = array;

       и вы хотите просмотреть, на что ссылается arrayp, используйте ло-
       кальную команду Range (Диапазон), задав начальный индекс 0 и диа-
       пазон 10.  Если вы этого не сделаете,  то выведется только первый
       элемент массива.

                           Структуры и объединения
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окнах Inspector (Проверка) для структуры и объединения вы-
       водятся значения элементов структуры и объединения, например:

               struct date {
                       int year;
                       char mounth;
                       char day;
               }       today;

       TDeb 3.0 #1-3               = 153 =


               union {
                       int small;
                       long large;
               }       holder;

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

                         Й[*]НInspecting letterinfo[n]Н3Н[ ][ ]»
                         є$7937:0852±±±±±±±±±±±±±±±±±±±±±±±±±±±^
                         єcount                       2 (Ox2)  ±
                         єfirstletter                 2 (Ox2)  °
                         є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>v
                         єstruct linfo                         є
                         ИНННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.5  Окно  Inspector для структуры или объединения (для
       языка Си)

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



       TDeb 3.0 #1-3               = 154 =

                                   Массивы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector (Проверка) для массивов  показывает  значение
       массивов элементов данных, таких, как:

               long    threed[3][4][5];
               char    message[] = "eat this words";

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

                  Й[*]НInspecting letterinfoННННННН3Н[ ][ ]»
                  є$7682:0852±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±^
                  є[0]                              {2,2}  ±
                  є[1]                              {2,0}  °
                  є[2]                              {2,0}  °
                  є[3]                              {1,1}  °
                  є[4]                              {1,0}  °
                  є[5]                              {1,0}  °
                  є[6]                              {1,0}  v
                  є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                  єstruct linfo [26]                       є
                  ИННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.6 Окно Inspector для массивов (для языка Си)



       TDeb 3.0 #1-3               = 155 =

                                   Функции
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне проверки для функции показан каждый параметр, с кото-
       рым вызывается функция.  Параметры выводятся в верхней части окна
       под адресом памяти.

                  Й[*]НInspecting analyzewordsН3Н[ ][ ]ННННН»
                  є071E9:02DD±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±є
                  єchar *bufp                               є
                  є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                  є long ()                                 є
                  ИНННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.7 Окно Inspector для функции (для языка Си)

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


                      Окна проверки данных для Паскаля
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Далее следует описание содержимого окон.

                             Скалярные величины
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окнах Inspector (Проверка) для скалярных значений выводят-
       ся значения простых элементов данных, например:

               var
                       X : integer;
                       Y : longint;

            В этих окнах Inspector содержится только одна строка  инфор-
       мации,  следующая за верхней строкой, где описывается адрес пере-
       менной.  Слева выводится тип скалярной  переменной  (byte,  word,
       integer,  longint и т.д.), а справа - ее текущее значение. Значе-
       ние может выводиться в десятичном,  шестнадцатиричном  или  обоих
       видах. Оно обычно выводится сначала в десятичном виде, а шестнад-
       цатиричное значение указывается в скобках (с помощью стандартного
       шестнадцатиричного префикса Турбо Паскаля $).  Для изменения вида
       вывода можно использовать программу TDINST.

           Если выводится переменная типа byte или shortint,  то показы-
       вается  также  ее символьный эквивалент.  Если данное значение не
       имеет эквивалента в виде печатаемого символа,  то для вывода сим-
       вольного значения используйте символ #,  за которой следует шест-
       надцатиричное значение. Символьное значение выводится перед деся-
       тичным или шестнадцатиричным значением.


       TDeb 3.0 #1-3               = 156 =

                     Й[*]НInspecting WordLenНННН3Н[ ][ ]Н»
                     є$595A:3EF0                         є
                     єWORD±±±±±±±±±±±±±±±±±±±2±±($2)±±±±±є
                     И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>ДЅ

            Рис. 6.8 Cкалярное окно Inspector (для Паскаля)



       TDeb 3.0 #1-3               = 157 =

                                  Указатели
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector (Проверка) для указателей показывает значение
       элементов  данных,  которые  ссылаются на другие элементы данных,
       например:

               var
                 IP : ^integer;
                 LP : ^^pointer;

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

            Вы можете также получить несколько строк, если откроете окно
       Inspector и дадите локальную команду Range (Диапазон), задав зна-
       чение счетчика > 1.

                      Й[*]НInspecting TempНН3ННН[ ][ ]»
                      є$8810:3EF4  : 8C10:0000        є
                      єPARM±±±±±±±±±±±±±±±±±±0003:7500є
                      єNEXT                  5200:0000є
                      є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                      єPARMRECPTR                     є
                      ИНННННННННННННННННННННННННННННННЅ

            Рис. 6.9 Окно Inspector для указателей (для языка Паскаль)



       TDeb 3.0 #1-3               = 158 =

                                   Массивы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector  (Проверка)  для массивов показывает значение
       массивов элементов данных, таких, как:

               var
                 A : array[1..10,1..20] of integer;
                 B : array[1..50] of boolean;

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

                  Й[*]НInspecting LetterTableНН3НН[ ][ ]ННН»
                  є$87D6:0058±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±є
                  є['A']                            (2,2)  є
                  є['B']                            (2,0)  є
                  є['C']                            (2,0)  є
                  є['D']                            (2,2)  є
                  є['D']                            (2,0)  є
                  є['E']                            (2,0)  є
                  є['F']                            (2,0)  є
                  є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                  єarray ['A'..'Z'] of record LINFOREC     є
                  ИННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.10 Окно Inspector для массивов (для языка Паскаль)

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



       TDeb 3.0 #1-3               = 159 =

                                   Записи
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окнах Inspector (Проверка) для записи в программе на  Пас-
       кале выводятся значения полей записи, например:

               record
                       year : integer;
                       month : 1..12;
                       day : 1..31;
               end

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

                  Й[*]НInspecting LetterTable['A']Н4Н[ ][ ]»
                  є$87D6:0058±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±є
                  єCOUNT                         2  ($2)   є
                  єFIRSTLETTER                   2  ($2)   є
                  є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                  єLINFOREC                                є
                  ИННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.11 Окно Inspector для записи (для языка Паскаль)

                             Функции и процедуры
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                    Й[*]НInspecting ProcessLineНН3Н[ ][ ]»
                    є$8340:0486±±±±±±±±±±±±±±±±±±±±±±±±±±є
                    єS : BUFFERSTR                       є
                    є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                    єPROCEDURE                           є
                    ИННННННННННННННННННННННННННННННННННННЅ

            Рис. 6.12 Окно Inspector для процедуры (для языка Паскаль)



       TDeb 3.0 #1-3               = 160 =

                     Окна проверки данных для Ассемблера
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Далее следует описание содержимого окон.

                             Скалярные величины
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окнах Inspector (Проверка) для скалярных значений выводят-
       ся значения простых элементов данных, например:

            VAR1    DW      99
            MAGIC   DT      4.608
            BIGNUM  DD      123456

            В этих  окнах Inspector содержится только одна строка инфор-
       мации,  следующая за верхней строкой, где описывается адрес пере-
       менной.  Слева  выводится  тип скалярной переменной (byte,  word,
       dword,  qword и т.д.),  а справа - ее текущее значение.  Значение
       может выводиться в десятичном, шестнадцатиричном или обоих видах.
       Оно обычно выводится сначала в десятичном виде, а шестнадцатирич-
       ное  значение указывается в скобках (с помощью стандартного шест-
       надцатиричного префикса Турбо Паскаля $).  Для изменения вида вы-
       вода можно использовать программу TDINST.

           Если выводится переменная типа byte или shortint,  то показы-
       вается также ее символьный эквивалент.  Если данное  значение  не
       имеет эквивалента в виде печатаемого символа,  то для вывода сим-
       вольного значения используйте символ #,  за которой следует шест-
       надцатиричное значение. Символьное значение выводится перед деся-
       тичным или шестнадцатиричным значением.

                    Й[*]НInspecting countНННН3НННННН[ ][ ]»
                    є$72ED:0019±±±±±±±±±±±±±±±±±±±±±±±±±±±є
                    єdword                    18    (12h) є
                    И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>Ѕ

            Рис. 6.13 Cкалярное окно Inspector (для Ассемблера)



       TDeb 3.0 #1-3               = 161 =

                                  Указатели
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector (Проверка) для указателей показывает значение
       элементов данных,  которые ссылаются на другие  элементы  данных,
       например:

             X       DW      0
             XPTR    DW      X
             FARPTR  DD      X

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

            Если указатель представляет собой указатель байтового типа и
       указывает на завершающуюся нулем символьную строку,  то выводится
       более подробная информация, показывающая значение каждого элемен-
       та в символьном массиве.  Слева на каждой строке выводится индекс
       массива ([1],  [2] и т.д.),  а справа - значение (как в скалярном
       окне Inspector). В этом случае вся строка выводится также в верх-
       ней строке окна, наряду с адресом переменной и адресом строки, на
       которую она указывает.

            Вы можете также получить несколько строк, если откроете окно
       Inspector и дадите локальную команду Range (Диапазон), задав зна-
       чение счетчика > 1.

                     Й[*]НInspecting textptrННН3НН[ ][ ]»
                     є$72ED:0017±ds:000A±[#test#text]±±±^
                     є[0]               'H'  72 (48h)   І
                     є[1]               'e' 101 (65h)   °
                     є[2]               'l' 108 (6Ch)   °
                     є[3]               'l' 108 (6Ch)   °
                     є[4]               'o' 111 (6Fh)   °
                     є[5]               ' '  32 (20h)   °
                     є[6]               'w'  87 (57h)   °
                     є[7]               'o' 111 (6Fh)   °
                     є[8]               'r' 114 (72h)   °
                     є[9]               'l' 108 (6Ch)   °
                     є[10]              'd' 100 (6Ch)   °
                     є[11]            '\x0D' 13 (0Dh)   °
                     є[12]            '\x0A' 10 (0Ah)   v
                     є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                     єbyte ptr                          є
                     ИННННННННННННННННННННННННННННННННННЅ

            Рис. 6.14 Окно Inspector для указателей (для Ассемблера)

       TDeb 3.0 #1-3               = 162 =

                                   Массивы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Inspector  (Проверка)  для массивов показывает значение
       массивов элементов данных, таких, как:

            WARRAY  DW      10 DUP (0)
            MSG     DB      "Greetings",0

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

            Для проверки части массива вы можете  использовать локальную
       команду Range (Диапазон).  Это полезно использовать,  если массив
       содержит множество элементов,  а вы хотите просмотреть  что-то  в
       середине массива.

                       Й[*]НInspecting TextННН3НН[ ][ ]»
                       є$72ED:000A±±±±±±±±±±±±±±±±±±±±±^
                       є[0]             'h'  72 (46h)  І
                       є[1]             'e' 101 (65h)  °
                       є[2]             'l' 108 (6Ch)  °
                       є[3]             'l' 108 (6Ch)  °
                       є[4]             'o' 111 (6Fh)  °
                       є[5]             ','  44 (6Ch)  v
                       є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                       єbyte [12]                      є
                       ИНННННННННННННННННННННННННННННННЅ

            Рис. 6.15 Окно Inspector для массивов (для Ассемблера)

                           Структуры и объединения
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окнах Inspector (Проверка) для структуры или объединения в
       программе   на  Ассемблере  выводятся  значения  полей  структуры
       (STRUC) или объединения (UNION), например:

             X       STRUC
             MEM1    DB      ?
             MEM2    DD      ?
             X       ENDS
             ANX     X       <1,ANX>

             Y       UNION
             ASBYTES DB      10 DUP (?)
             ASFLT   DT      ?
             Y       ENDS
             AY      Y       

       TDeb 3.0 #1-3               = 163 =


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

                       Й[*]НInspecting NamesНН3Н[ ][ ]»
                       є$72ED:001D±±±±±±±±±±±±±±±±±±±±є
                       єfirstname   "Carleton       " є
                       єlastname    "Whitehall      " є
                       єage             '#'  35 (23h) є
                       єsex             'M'  77 (4Dh) є
                       є<І°°°°°°°°°°°°°°°°°°°°°°°°°°°>є
                       єstruc namedata                є
                       ИННННННННННННННННННННННННННННННЅ

            Рис. 6.16 Окно Inspector для структуры (для Ассемблера)



       TDeb 3.0 #1-3               = 164 =

                        Локальное меню окна Inspector
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                                    ЪДДДДДДДДДДДДДДДДДДДї
              Диапазон              і Range...          і
              Изменение             і Change...         і
                                    ГДДДДДДДДДДДДДДДДДДДґ
              Проверка              і Inspect           і
              Спуск                 і Descend           і
              Новое выражение       і New Expression... і
              Преобразование типа   і Type cast...      і
                                    АДДДДДДДДДДДДДДДДДДДЩ

                              Команда Range...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Range (Диапазон) задает начальный  элемент  и  число
       элементов,  которые  вы  хотите вывести на экран.  Данную команду
       можно использовать при просмотре части массива  (подмножества его
       элементов).

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

            Эта команда особенно полезна в языке Си,  где часто описыва-
       ется  указатель на элемент данных типа "char *p" (и при этом под-
       разумевалось, что p указывает на массив символов, а не на отдель-
       ный символ).

                              Команда Change...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Change (Изменение) изменяет значение текущего (подс-
       веченного) элемента на то значение, которое вы введете в ответ на
       подсказку.  Если данный язык это позволяет, Турбо отладчик выпол-
       няет  необходимое преобразование типов (это делается точно также,
       как если бы для изменения значения переменной использовался  опе-
       ратор  присваивания).  Более  подробно об операции присваивания и
       приведении типов рассказывается в Главе 9.

                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            По команде Inspect (Проверка) открывается новое окно провер-

       TDeb 3.0 #1-3               = 165 =

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

            Если в текущем окне проверки выводится функция, то по коман-
       де Inspect выведется исходный код этой функции.

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

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

                               Команда Descend
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Descend  (Спуск) работает аналогично команде локаль-
       ного меню Inspect (Проверка), но вместо открытия нового окна про-
       верки  для вывода содержимого подсвеченного элемента она помещает
       новый элемент в текущее окно проверки.  Таким образом, данная ко-
       манда как бы представляет собой гибрид команд New Expression (Но-
       вое выражение) и Inspect (Проверка).

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

                          Команда New Expression...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда New Expression (Новое выражение) выводит подсказку с
       запросом имени переменной или выражения, которые вы хотите прове-
       рить. Это позволяет вам проверять другие данные без вывода на эк-
       ран дополнительных окон проверки.  Используйте эту команду,  если
       вас больше не интересуют данные в текущем окне проверки.

            Окно Inspector для объектов Паскаля и классов С++ отличаются
       от обычных окон проверки. Описание окон проверки для типов объек-
       тов и классов содержится в Главе 10.

                            Команда Type Cast...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Type Cast (Приведение типа) позволяет вам задать для
       проверяемого  элемента  другой тип данных (Byte,  Word,  Integer,

       TDeb 3.0 #1-3               = 166 =

       указатель на Char,  gh2fp, lh2fp). Это полезно использовать, если
       окно  Inspector содержит идентификатор,  для которого отсутствует
       информация о типе,  а также для явного задания типов нетипизован-
       ных указателей.

                 Примечание: О том как использовать типы gh2fp  и  lh2fp
            рассказывается в Главе 17.




       TDeb 3.0 #1-3               = 167 =

                           Глава 7. Точки останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В Турбо  отладчике  понятие  точек останова используется для
       описания таких функций отладчика,  как точки останова, точки наб-
       людения и точки трассировки.

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

            В Турбо отладчике эти три концепции унифицируются, а понятие
       точки останова включает в себя три следующих элемента:

               - место в программе (адрес),  где находится точка остано-
                 ва;

               - условие, при котором она срабатывает;

               - что происходит, когда срабатывает точка останова (дейс-
                 твие).

            Адрес может представлять собой отдельный адрес  в  программе
       или  быть глобальным (при этом останов может происходить на любой
       строке исходного кода или инструкции программы).

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

               - всегда;

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

               - когда объекты данных изменяют свое значение.

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

            При достижении точки останова  может  выполняться  следующее
       действие:

               - остановка выполнения программы (точка останова);

               - регистрация значения выражения;

       TDeb 3.0 #1-3               = 168 =


               - выполнение выражения (вставка кода);

               - разрешение группы точек останова;

               - запрещение группы точек останова.

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

            Во многих  случаях  вам понадобиться задавать только простые
       точки останова.  При этом при достижении программой одного из та-
       ких  адресов  она останавливается.  Вы можете задать или отменить
       точку останова в любом месте программы.  Для этого курсор  просто
       помещается на строку исходного кода и нажимается клавиша F2. Мож-
       но также задать точку останова на любой  строке  машинного  кода,
       для  чего  клавиша F2 нажимается после того,  как вы укажете инс-
       трукцию в  области  Code  (Код) окна CPU (Центральный процессор).

            Если у  вас есть "мышь",  просто нажмите кнопку в левых двух
       позициях той строки,  на которой вы хотите установить или удалить
       точку останова. (Если вы находитесь в правильной позиции, в инди-
       каторе позиции появляется звездочка (*).)

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



       TDeb 3.0 #1-3               = 169 =

                              Меню Breakpoints
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Доступ к глобальному меню Breakpoints (Точки останова) можно
       получить в любой момент с помощью оперативных клавиш Alt-B.

                         Й[*]НBreakpointsНННННННННННН»
                         є±Toggle±±±±±±±±±±±±±±±±±±F2є
                         є At...               Alt-F2є
                         є Changed memory global...  є
                         є Expression true global... є
                         є Hardware breakpoints...   є
                         є Delete All                є
                         ИНННННННННННННННННННННННННННЅ

                               Команда Toggle
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Toggle  (Переключение)  устанавливает  или  отменяет
       точки останова по текущему (подсвеченная строка)  адресу  в  окне
       Module (Модуль) или области Code (Код) окна CPU (Центральный про-
       цессор). Можно также воспользоваться оперативной клавишей F2.


                                Команда At...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда At  (На...) устанавливает точку останова по конкрет-
       ному адресу в программе. Этот адрес нужно ввести в ответ на выво-
       димую  подсказку.  Сокращенным  вариантом данной команды являются
       оперативные клавиши Alt-F2.  По данной команде выводится диалого-
       вое окно, в котором устанавливаются параметры точки останова.

                 Примечание: Описание   диалогового   окна    Breakpoint
            Options (Параметры точки останова) приводится ниже.


                      Команда Changed Memory Global...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

           Команда Changed  Memory  Global  (Измененная  глобальная  па-
       мять) устанавливает точку останова,  которая  срабатывает,  когда
       данная область памяти изменяет свое значение.

                 Примечание: Более подробная информация содержится далее
            в описании команды Changed Memory (Измененная память) в раз-
            деле "Локальное меню окна Breakpoints".


                      Команда Expression True Global...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Expression True Global (Истинное значение глобально-

       TDeb 3.0 #1-3               = 170 =

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

                 Примечание: Более подробная информация содержится далее
            в  описании команды Condition Expression True (Истинное зна-
            чение условного выражения) в разделе  "Локальное  меню  окна
            Breakpoints".

                       Команда Hardware Breakpoint...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Hardware Breakpoint (Аппаратная точка останова)  ис-
       пользуется  для  доступа  к диалоговому окну Hardware Breakpoints
       Options (Параметры аппаратной отладки). Для того, чтобы можно бы-
       ло использовать средства аппаратной отладки,  нужна соответствую-
       щая настройка системы.  Кроме того,  вы должны иметь  специальную
       плату аппаратной отладки.

            Информация по интерфейсу со  средствами  аппаратной  отладки
       приведена в разделе "Аппаратная отладка".


                             Команда Delete All
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Delete All (Удалить все) отменяет  все установленные
       точки останова.



       TDeb 3.0 #1-3               = 171 =

                              Окно Breakpoints
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

             Й[*]НBreakpointsНННННННННННННННННННННННН3ННН[ ][ ]Н»
             є TPDEMO.220 є Breakpoint                          є
             є TPDEMO.225 є Always                              є
             є±TPDEMO.226±є Enabled                             є
             є            є                                     є
             є            є                                     є
             є            є                                     є
             И<І°°°°°°°°°°>НННННННННННННННННННННННННННННННННННННЅ

            Рис. 7.1 Окно Breakpoints

            В окне Breakpoints (Точки останова) имеется две  области.  В
       левой  области  (список точек останова) показан список всех адре-
       сов,  где установлены точки останова. В правой области (подробная
       информация  о точках останова) показаны подробные данные по теку-
       щим (подсвеченным в левой области) точкам останова.

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


                       Локальное меню окна Breakpoints
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                    ЪДДДДДДДДДДДДДДДДДДДДДї
                    і Set Options...      і  Установить параметры
                    і Add...              і  Добавить
                    і Remove              і  Удалить
                    і Delete all          і  Удалить все
                    і Inspect             і  Проверить
                    і Group...            і  Группа
                    АДДДДДДДДДДДДДДДДДДДДДЩ


                            Команда Set Option...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

       TDeb 3.0 #1-3               = 172 =


            Команда Set Option (Установить параметры) открывает диалого-
       вое окно, в котором содержится два набора многопозиционных перек-
       лючателей,  одно поле ввода и одно поле проверки. В этом диалого-
       вом окне вы можете:

            - присоединить точку останова к конкретной группе;
            - разрешить или запретить точку останова;
            - установить или изменить адрес точки останова;
            - сделать точку останова глобальной.


                               Команда Add...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Add (Добавление) локального  меню  окна  Breakpoints
       открывает диалоговое окно Breakpoint Options (Параметры точки ос-
       танова),  аналогично команде Set Options (Установка  параметров).
       Разница здесь в том, что курсор устанавливается на пустое тексто-
       вое поле Address (Адрес). Адрес, по которому вы хотите установить
       точку останова,  нужно ввести в поле ввода адреса. Например, если
       в исходном коде программы на языке Си вы хотите  установить точку
       останова в строке с номером 3201, введите в текстовое поле #3201.
       Если строка кода не отображается в окне Module  (Модуль), введите
       символ #, имя модуля, еще один символ # и номер строки, например,
       #OTHERMOD#3201.

            Добавить точку останова (получив доступ к команде Add) можно
       также, начав вводить адрес,  по которому вы хотите ее установить,
       в окне Breakpoint.  После набора первого символа открывается диа-
       логовое окно Breakpoint Options,  переводя вас в  текстовое  поле
       Address.

            Когда вы добавите точку останова,  задав ее адрес, для моди-
       фикации ее поведения можно использовать другие команды локального
       меню Breakpoint Options.



       TDeb 3.0 #1-3               = 173 =

                               Команда Remove
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Remove  (Удаление)  удаляет  текущую  (подсвеченную)
       точку останова.  Этой  команде  соответствует оперативная клавиша
       Del.

                             Команда Delete All
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Delete All (Удалить все) удаляет все точки останова,
       как глобальные,  так и установленные по конкретным адресам.  Если
       вы хотите, чтобы ваша программа останавливалась на точках остано-
       ва, вам придется задать другие точки  останова.  Используйте  эту
       команду внимательно!

                              Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка) выводит строку исходного кода или
       инструкцию Ассемблера, соответствующую записи текущей (подсвечен-
       ной) точки останова.  Если точка останова задана по адресу, соот-
       ветствующему исходной строке программы, то будет открыто (и уста-
       новлено на данную  строку)  окно  Module  (Модуль).  В  противном
       случае будет открыто окно CPU (Центральный процессор),  в котором
       область кода будет установлена на инструкцию,  где  задана  точка
       останова.

            Эту команду можно вызвать также,  нажав клавишу Enter,  если
       подсветка позиционирована на точке останова.

                                Команда Group
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Group  (Группа) позволяет вам объединять точки оста-
       нова в группы. Группа точек останова идентифицируется положитель-
       ным целым числом, которое автоматически генерируется Турбо отлад-
       чиком или назначается вами.  Отладчик  автоматически  присваивает
       групповое число  каждой создаваемой точке останова.  Генерируемый
       номер группы представляет собой наименьший еще  не использованный
       номер. Таким образом, если номера 1, 2 и 5 уже используются груп-
       пами, то следующей создаваемой точке останова автоматически прис-
       ваивается номер группы 3.

            После того,  как точка останова создана, вы можете модифици-
       ровать номер группы точки останова  с  помощью  диалогового  окна
       Breakpoint Options (Параметры точки останова), поместив точку ос-
       танова в группу,  связанную с другими точками останова. Объедине-
       ние точек  останова  в группы позволяет вам разрешать,  запрещать
       или удалять множество точек останова с помощью одного действия.

            Когда в локальном меню окна  Breakpoint  выбирается  команда
       Group, на  экран  выводится диалоговое окно Edit Breakpoint Group

       TDeb 3.0 #1-3               = 174 =

       (Редактирование группы точек останова).  В диалоговом окне  выво-
       дится список  текущих  групп точек останова и позволяет вам легко
       объединить все функции модуля в одну группу.

            Й[*]ННННННННННEdit Breakpoint groupsННННННННННННННННННННН»
            є Group                                                  є
            є ±1±±#BCDEMO#38±#BCDEMO#39±±±±±±±±±±±±±±±±±       OK    є
            є ±3±±#BCDEMO#40±±±±±±±±±±±±±±±±±±±±±±±±±±±±      ±±±±±± є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±             є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      Help   є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      ±±±±±± є
            є  Add...  Delete   Enable   Disable                     є
            є  ±±±±±   ±±±±±±   ±±±±±±   ±±±±±±                      є
            ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 7.2 Диалоговое окно Edit Breakpoint Group



       TDeb 3.0 #1-3               = 175 =

                             Окно списка Groups
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В окне  списка Groups (Группы) выводятся текущие присвоенные
       группы точек останова.

                                "Кнопка" Add
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Кнопка" Add (Добавить)  активизирует  диалоговое  окно  Add
       Group (Добавление группы).

                    Й[*]ННННННННННAdd groupННННННННННННННН»
                    є Module/Class                        є
                    є ±BGDEMO±±±±±±±±±±±±±±±±±      OK    є
                    є ±±±±±±±±±±±±±±±±±±±±±±±±     ±±±±±± є
                    є ±±±±±±±±±±±±±±±±±±±±±±±±            є
                    є ±±±±±±±±±±±±±±±±±±±±±±±±     Cancel є
                    є ±±±±±±±±±±±±±±±±±±±±±±±±     ±±±±±± є
                    є                                     є
                    є ±(.)±Modules±±±±±±±±±±±±     Help   є
                    є ±( ) Classes±±±±±±±±±±±±     ±±±±±± є
                    є                                     є
                    ИНННННННННННННННННННННННННННННННННННННЅ

            Рис. 7.3 Диалоговое окно Add Group

            Диалоговое окнo Add Group (Добавление группы)  содержит одно
       поле списка и один набор селективных переключателей, которые поз-
       воляют вам добавить к группе точек останова все функции  конкрет-
       ного модуля или все функции-элементы класса.

            - В поле списка Module/Class (Модуль/Класс) выводится список
              модулей или классов, содержащихся в программе, загружаемой
              в окно Module.  Переместите подсветку на нужный модуль или
              класс,  затем активизируйте "кнопку" OK,  чтобы установить
              точки останова на всех функциях модуля или класса. Все ус-
              тановленные  точки останова объединяются в одну группу то-
              чек останова.

            - Два  селективных  переключателя  позволяют вам выбрать тип
              функций, которые выводятся в поле списка Module/Class:

                 - селективный переключатель  Module  (Модуль)  выбирает
                   все модули, содержащиеся в текущей программе, и выво-
                   дит их в поле списка Module/Class;

                 - Селективный переключатель Classes  (Классы)  выбирает
                   для  вывода в окне списка Module/Class все классы C++
                   (или объекты Паскаля),  содержащиеся в текущей  прог-
                   рамме.

            Delete

       TDeb 3.0 #1-3               = 176 =


            "Кнопка" Delete    (Удаление)   в   диалоговом   окне   Edit
       Breakpoints Groups  (Редактирование групп точек останова) удаляет
       группу,  подсвеченную в поле списка Groups.  Все  точки  останова
       этой группы и их параметры будут отменены.

            Enable

            "Кнопка" Enable (Разрешение) активизирует  ранее запрещенную
       группу точек останова.

            Disable

            Команда Disable (Запрещение) временно запрещает группу точек
       останова, подсвеченную в данный момент в окне списка Groups. Зап-
       рещенные точки останова не стираются,  они просто перестают дейс-
       твовать в текущем сеансе отладки. Разрешение группы вновь активи-
       зирует точки останова группы и все заданные для них параметры.



       TDeb 3.0 #1-3               = 177 =

                     Диалоговое окно Breakpoint Options
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Диалоговое окно  Breakpoint Options (Параметры точки остано-
       ва) доступно с помощью команды BreakpoinіAt,  а также  с  помощью
       команд  Set  Option (Установка параметров) и Add (Добавление) ло-
       кального меню окна Breakpoints.

            Й[*]ННННННННННННННBreakpoint optionsННННННННННННННННННННН»
            є Address                                                є
            є ±#BCDEMO#43±±±±±±±±±±±±±±±± ±[ ]±Global±±±±±±±   OK    є
            є                                                 ±±±±±± є
            є Group ID                                               є
            є ±1±±±±±±±±±±±±±±±±±±±±±±±±± ±[ ]±Disabled±±±±±  Cancel є
            є                                                 ±±±±±± є
            є Conditions and actions                                 є
            є ±Breakpoint,±Always±±±±±±±±±±±±±±±±±±±±±±±±±±±  Help   є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±  ±±±±±± є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±         є
            є ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±         є
            є                                                        є
            є ±Change...±±±  ±Add...±±±  ±±Delete±±                  є
            ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 7.4 Диалоговое окно Breakpoint Options

            Address - адрес;  Breakpoint options - параметры точки оста-
       нова; Conditions  and  actions  - условия и действия;  Group ID -
       идентификатор группы;  Global - глобальная; Disabled - запрещена;
       Change - изменение; Add - добавление; Delete - удаление; OK - вы-
       бор; Cancel - отмена; Help - справка.




       TDeb 3.0 #1-3               = 178 =

                                Поле Address
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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


                                Поле Group ID
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Текстовое поле Group ID (Идентификатор группы) позволяет вам
       присвоить точку останова новой или  существующей  группе.  Группа
       идентифицируется уникальным положительным целым значением (описа-
       ние групп точек останова см. выше).


                            Переключатель Global
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Переключатель Global   (Глобальная),  будучи  установленным,
       разрешает глобальную проверку.  Это означает,  что при каждом вы-
       полнении строки  исходного  кода  будет проверяться условие точки
       останова. Поскольку глобальные  точки  останова  проверяются  при
       каждом выполнении строки исходного кода, поле адреса, так как оно
       больше не нужно,  устанавливается в значение  (не-
       доступно).

                 Примечание: Более подробно о глобальных точках останова
            см. далее.

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


                           Переключатель Disabled
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Этот блок проверки выключает текущую  точку  останова.  Хотя
       этот переключатель  аналогичен команде Toggle (Переключение) меню
       Breakpoints (см. выше), Disable не сбрасывает параметры точки ос-
       танова (как это происходит по команде Toggle). Disable просто ус-
       танавливает маску точки останова,  пока вы не разрешите ее, пере-
       установив данный переключатель.  Когда точка останова вновь будет
       разрешена, все ее установленные ранее параметры снова будут дейс-
       твовать.


       TDeb 3.0 #1-3               = 179 =

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


                      Поле списка Condition and Action
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Поле списка Condition and Action (Условие и действие)  выво-
       дит набор условий и действий,  связанных с текущей точкой остано-
       ва.

                               "Кнопка" Change
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Кнопка" Change (Изменение) открывает при ее выборе диалого-
       вое поле Conditions and Actions (см. следующий раздел). С помощью
       данной команды  вы  можете редактировать элемент,  подсвеченный в
       поле списка Conditions and Actions (Условия и действия).


                               "Кнопка" Add
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Кнопка" Add (Добавление) добавляет к текущей точке останова
       новый набор условий и действий. Аналогично описанной выше команде
       Change (Изменение),  Add открывает диалоговое поле Conditions and
       Actions.

                               "Кнопка" Delete
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Кнопка" Delete (Удаление) удаляет из определения точки  ос-
       танова текущий элемент в списке Conditions and Actions.




       TDeb 3.0 #1-3               = 180 =

                   Диалоговое окно Conditions and Actions
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Когда вы выбираете в диалоговом окне Breakpoint Options (Па-
       раметры точки останова) "кнопки" Change или Add, то выводится ди-
       алоговое окно Conditions ans Actions (Условия и действия).

            Й[*]ННННННННННННННConditions and actionsННННННННННННННННН»
            є Condition                Action                        є
            є (*) Always                 ( ) Break             OK    є
            є ( ) Changed Memory         (*) Execute          ±±±±±± є
            є ( ) Expression true        ( ) Log                     є
            є ( ) Hardware                                    Cancel є
            є                                                 ±±±±±± є
            є Conditions expression   Action expression              є
            є ±±i == 2±±±±±±±±±±±±±±± ±Break±±±±±±±±±±±±±±±±  Help   є
            є ±±±±±±±±±±±±±±±±±±±±±±± ±±±±±±±±±±±±±±±±±±±±±±  ±±±±±± є
            є ±±±±±±±±±±±±±±±±±±±±±±± ±±±±±±±±±±±±±±±±±±±±±±         є
            є                                                        є
            є ±Add±±±±±   ±Delete±±   ±±Add±±±   ±Delete±±           є
            є                                                        є
            є                         Pass count                     є
            є ±Hardware...±±±         ±1±±±±±±±±±±±±±±±±±±±±         є
            ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННЅ

            Рис. 7.5 Диалоговое окно Conditions and Actions

            Action - действие;  Condition - условие; Action expression -
       выражение  действия;  Condition  expression  - выражение условия;
       Pass count - счетчик проходов; Hardware - аппаратная; Add - доба-
       вить;  Delete  -  удалить;  OK - выбор;  Cancel - отмена;  Help -
       справка.

                 Примечание: Более подробно об изменении  точек останова
            рассказывается ниже.

            При установке на строке исходного кода точки останова ее ха-
       рактеристиками по умолчанию будут Always (всегда  срабатывает)  и
       Break (прерывание  выполнения  программы  при  достижении  данной
       строки). С помощью диалогового окна Conditions and Actions (Усло-
       вия и  действия)  вы можете настроить условия,  при которых будет
       срабатывать точка останова, и задать различные действия, предпри-
       нимаемые при ее срабатывании.

            Вы можете настроить точку останова, используя два набора се-
       лективных переключателей и три текстовых поля. Кроме того, "кноп-
       ка" Hardware   (Аппаратная)  позволяет  вывести  диалоговое  окно
       Hardware Breakpoints Options (Параметры аппаратных точек  остано-
       ва), что  позволяет вам задать условия для аппаратной точки оста-
       нова.



       TDeb 3.0 #1-3               = 181 =

                      Селективные переключатели условия
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


                                    Always
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Выбор Always (Постоянно) показывает,  что  для  срабатывания
       точки останова не требуется проверять истинность (выполнение) до-
       полнительных условий.

                                Changed Memory
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Значение Changed Memory (Изменение памяти) позволяет  отсле-
       живать  переменную  в памяти или объект и приводит к срабатыванию
       точки останова  при  изменении значение этого объекта.  Для ввода
       выражения, соответствующего наблюдаемому объекту, используйте по-
       ле ввода Condition Expression (Выражение условия).

                 Примечание: Более подробно о Changed Memory рассказыва-
            ется далее.

                                Expression True
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Значение Expression  True  (Выражение истинно) позволяет за-
       дать срабатывание точки останова,  когда выражение принимает  ис-
       тинное значение (становится ненулевым).  Для ввода выражения, ко-
       торое  будет  вычисляться  при  каждом  при  каждом   обнаружении
       заданного действия, используйте поле ввода Condition Expression.

                 Примечание: Подробности описаны ниже.

                                   Hardware
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Значение Hardware (Аппаратура) приводит к срабатыванию точки
       останова по  указанию драйвера устройства со вспомогательными ап-
       паратными средствами. Поскольку вспомогательные аппаратные средс-
       тва  вы можете использовать только для глобальной точки останова,
       перед доступом к этому  средству  нужно  проверить  переключатель
       Global  (Глобальная)  в диалоговом окне Breakpoint Options (Пара-
       метры точки останова).

                 Примечание: Простой способ задания аппаратной точки ос-
            танова вам предоставляет команда HardwareіBreakpoint.

       TDeb 3.0 #1-3               = 182 =


            Перед активизацией "кнопки" Hardware в нижней части диалого-
       вого  окна важно  выбрать селективный переключатель Hardware. Ак-
       тивизация этой   "кнопки"  приводит  к  выводу  диалогового  окна
       Hardware Breakpoint Options (Параметры аппаратной  точки  остано-
       ва). Параметры, которые вы можете выбирать в данном окне, описаны
       в текстовом файле HDWDEBUG.TD на дистрибутивном диске.



       TDeb 3.0 #1-3               = 183 =

                      Селективные переключатели Action
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Селективные переключатели  Action (Действие) позволяют уста-
       навливать пять параметров:

                                     Break
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                                    Execute
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Значение Execute (Выполнить) приводит к выполнению выражения
       (выражение запрашивается в поле ввода Action Expression). Выраже-
       ние должно иметь некоторые побочные эффекты, например, присваива-
       ние  значения переменной.  Эта возможность позволяет вам включить
       выражение,  которое будет выполняться перед кодом вашей программы
       в  строке с текущим номером ("вставка кода").  Такое средство по-
       лезно использовать,  когда вы хотите изменить поведение  подпрог-
       раммы,  чтобы проверить "диагноз" или скорректировать ошибку. Это
       позволяет при проверке минимальных изменений в программе  не  вы-
       полнять цикл компиляции и компоновки.

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

                                      Log
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Задание Log (Регистрация) приводит к тому,  что значение вы-
       ражения будет записано в окне Log. Вам выводится подсказка. В от-
       вет на нее вы должны ввести выражение, значение которого требует-
       ся зарегистрировать. Будьте внимательны, чтобы выражение не имело
       никаких неожиданных побочных эффектов.

                 Примечание: Описание  выражений и побочных эффектов со-
            держится в Главе 9.

                             "Кнопка" Enable group
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            "Кнопка" Enable  group  (Разрешение  группы) позволяет вновь
       активизировать запрещенную ранее группу точек останова.

                             "Кнопка" Disable group
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


       TDeb 3.0 #1-3               = 184 =

            "Кнопка" Disable  group  (Запрещение  группы)  позволяет вам
       запретить группу точек останова.  При запрещении группы точек ос-
       танова они не стираются, а просто маскируются на время сеанса от-
       ладки.



       TDeb 3.0 #1-3               = 185 =

                         Задание условий и действий
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Наиболее важный шаг при задании точки останова состоит в за-
       дании условий,  при которых будет срабатывать точка  останова,  и
       действий, которые  будут  выполняться при ее срабатывании.  Этими
       параметрами управляют  два   текстовых   поля:   поле   Condition
       Expression (Выражение  условия)  и  Action  Expression (Выражение
       действия).

                              Выражение условия
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Когда вы выбираете селективный переключатель  Changed Memory
       (Изменение памяти),   Expression  True  (Выражение  истинно)  или
       Hardware Condition (Аппаратное условие), нужно задать набор усло-
       вий,  которые  будут  известны  Турбо  отладчику при срабатыванию
       точки останова. Набор условий состоит из одного или более выраже-
       ний.  Чтобы  весь набор условий принял истинное значение,  каждое
       условие должно принять истинное значение.

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

                 Примечание: Подробнее о задании  действия, выполняемого
            по точке останова,  рассказывается ниже в разделе "Выражение
            действия".

            Чтобы добавить к точке останова условие, нужно:

            1. Выбрать селективный переключатель Changed Memory (Измене-
               ние  памяти),  Expression  True  (Выражение  истинно) или
               Hardware (Аппаратная).

            2. Выбрать "кнопку" Add(Добавление) под текстовым поле ввода
               Condition Expression.

            3. Ввести  в  текстовое поле Condition Expression (Выражения
               условия) условие или выражение с переменной.

            4. Если вы хотите,  чтобы для  конкретного  набора  действий
               проверялось  значение  нескольких переменных или условий,
               повторите шаги 2 и 3,  пока в  текстовое  поле  Condition
               Expression не будут добавлены все условия.

            5. Когда вы зададите набор условий, используйте для указания
               списка действий,  выполнение которых вы хотите задать при
               срабатывании точки останова, поле ввода Action Expression
               (Выражение действия).

            Одна точка останова может иметь несколько  наборов связанных
       с ней условий и действий. Если вы хотите связать с точкой остано-

       TDeb 3.0 #1-3               = 186 =

       ва более одного набора условий и действий,  то выберите после за-
       дания первой  последовательности  условий и действий "кнопку" OK.
       При этом будет закрыто диалоговое окно Conditions and  Actions, и
       вы вернетесь в диалоговое окно Breakpoint Options (Параметры точ-
       ки останова). Здесь выберите для добавления нового набора условий
       и  действий  команду Add (Добавление).  Если точка останова имеет
       несколько условий и действий,  каждое из них будет вычисляться  в
       том порядке, в каком они введены. Если при вычислении условий ис-
       тинное значение принимает несколько условий, то будет выполняться
       более одного набора действий.

            "Кнопка" Delete (Удаление),  которая находится под текстовым
       полем Condition Expression,  позволяет вам удалить из  текстового
       поля Condition  Expression (Выражение условия) текущее подсвечен-
       ное выражение.  Выберите эту "кнопку", если вы хотите удалить ус-
       ловие из набора условий.

                              Выражение действия

            При выборе  селективного переключателя Execute (Выполнение),
       Enable Group (Разрешение группы) или  Disable  Group  (Запрещение
       группы) должен быть предусмотрен набор действий,  благодаря кото-
       рым Турбо отладчик будет знать, что нужно делать при срабатывании
       точки останова. Набор действий может состоять из нескольких дейс-
       твий:

            Чтобы добавить к точке  останова  набор  действий,  сделайте
       следующее:

            1. Выберите  селективный переключатель Execute (Выполнение),
               Enable Group (Разрешение группы) или Disable Group  (Зап-
               рещение группы).

            2. Выберите "кнопку" Add (Добавление), которая находится под
               текстовым полем Action Expression.

            3. Введите действие в текстовое поле Action Expression  (Вы-
               ражения действия).

               Если вы хотите, чтобы при срабатывании точки останова вы-
               полнялось несколько действий,  повторите шаги 2 и 3, пока
               все  они  не  будут  добавлены  в  текстовое  поле Action
               Expression.

            4. Когда вы закончите вводить действия,  выберите в диалого-
               вом окне Conditions and Actions "кнопку" OK.

            Если вы выбрали селективные переключатели Enable Group (Раз-
       решение группы) или Disable Group (Запрещение группы), для указа-
       ния  группы,  которую  вы ходите разрешить или запретить,  просто
       введите в текстовое поле Action Expression номер группы.

            "Кнопка" Delete (Удаление),  которая находится под текстовым

       TDeb 3.0 #1-3               = 187 =

       полем Action Expression, позволяет вам удалить текущее условие из
       набора условий.

                          Поле ввода Pass Count...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Поле ввода Pass Count (Счетчик проходов) задает, сколько раз
       данное действие должно быть обнаружено перед тем,  как оно срабо-
       тает. Значение счетчика уменьшается только в том случае, если со-
       ответствующее точке останова условие принимает истинное значение.
       Это означает,  что если наряду с условием установили счетчик про-
       ходов, то точка останова сработает, когда условие n-ый раз примет
       истинное значение.



       TDeb 3.0 #1-3               = 188 =

                          Настройка точек останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                           Простые точки останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            1. Переместите курсор на нужную строку исходного кода (в ок-
               не Module или в области кода окна CPU)  и  дайте  команду
               BreakpointsіToggle (Точки остановаіПереключение) или наж-
               мите клавишу F2 (можно также  щелкнуть  кнопкой  "мыши").
               Если  дать  эту команду на строке,  где уже имеется точка
               останова, то эта точка останова будет удалена.

            2. Дайте команду локального меню Add  (Добавить)  в  области
               списка  точек  останова  окна Breakpoints и введите адрес
               кода,  по которому вы ходите задать точку останова. Адрес
               кода имеет тот же формат,  что и формат указателя исполь-
               зуемого языка.  Подробнее о выражениях  рассказывается  в
               Главе 9.

            3. Чтобы  установить точку останова на текущей строке в окне
               Module, дайте команду BreakpointsіAt  (Точки  остановаіПо
               адресу...).

                          Глобальные точки останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                 Примечание: Если  вы хотите установить аппаратные точки
            останова, проверьте переключатель Global.

            Поскольку действие отладчика  будет  выполняться  на  каждой
       строке исходного кода,  глобальные точки останова существенно за-
       медляют выполнение программы.  Используйте глобальные точки оста-
       нова осторожно. К ним следует прибегать только в том случае, если
       вы хотите точно определить, когда переменная изменяет значение, и
       когда становятся  истинными  некоторые  условия,  либо когда ваша

       TDeb 3.0 #1-3               = 189 =

       программа работает с данными.

                 Примечание: Быстрый способ задания глобальной точки ос-
            танова  предлагает  окно  Breakpoints.  Подробнее о командах
            Changed Memory Global и Expression True Global рассказывает-
            ся выше.

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

                   Остановка при изменении объектов данных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Когда вы хотите определить, где в вашей программе изменяются
       определенные объекты данных, сначала с помощью одного из методов,
       описанных в предыдущем разделе, установите глобальную точку оста-
       нова.  Затем можно использовать селективный переключатель Changed
       Memory   (Измененная  память)  диалогового  окна  Conditions  and
       Actions (Условия и действия).  Введите выражение,  ссылающееся на
       область  памяти,  которую  вы хотите отслеживать и необязательный
       счетчик числа отслеживаемых объектов. Общее число байт отслежива-
       емой области соответствует произведению размера объекта, на кото-
       рое ссылается выражение,  на число объектов.  Предположим, напри-
       мер, что у вас имеется следующий массив Си:

            int string[81];

            Если вы  хотите отследить изменение первого элемента данного
       массива, введите в поле ввода Condition Expression следующий эле-
       мент:

            &sting[0], 10

            Наблюдаемая область памяти имеет длину 20 байт, так как зна-
       чение int занимает два байта, а вы задали отслеживание 10 байт.

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

            Если у вас установлен аппаратный драйвер, Турбо отладчик для
       отслеживания изменений в области данных попытается установить ап-
       паратную точку останова. Различные аппаратные отладчики поддержи-
       вают  различное число и типы аппаратных точек останова.  Увидеть,

       TDeb 3.0 #1-3               = 190 =

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

                              Выражения условия
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

           Область действия выражений, заданных для точек останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Если вы хотите установить точку останова для выражения в мо-
       дуле, который в данный момент не загружен отладчиком, и Турбо от-
       ладчик не может найти данное выражение,  то вы можете переопреде-
       лить область действия и задать файл,  который содержит выражение,
       или использоваться  для  смены  модулей  команду ViewіModule (Об-
       зоріМодуль).

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



       TDeb 3.0 #1-3               = 191 =

                          Аппаратные точки останова
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Аппаратная точка останова использует поддерживающие средства
       аппаратной отладки  (плату  аппаратной отладки или отладочные ре-
       гистры процессора 80386 или старше).  Если в вашей системе  уста-
       новлены средства  аппаратной отладки (команда FileіGet Info пока-
       зывает установку Breakpoints в Hardware),  то с помощью одного из
       следующих методов вы можете задать аппаратную точку останова:

            - Выберите команду BreakpointsіChanged Memory Global,  кото-
              рая чаще всего используется для аппаратных точек останова.

            - Выберите команду BreakpointsіHardware.

            - Выведите меню Breakpoint Options  (выберите  команду  окна
              ViesіBreakpoints BreakpointsіAt  или  Set Options),  затем
              сделайте следующее:

                 - проверьте переключатель Global;

                 - активизируйте "кнопку" Change (Изменение)ж

                 - в диалоговом окне Conditions and Actions выберите се-
                   лективный переключатель Hardware (Аппаратная) и акти-
                   визируйте "кнопку" Hardware диалогового окна;

                 - для  вывода  диалогового  окна  Hardware   Breakpoint
                   Options (Параметры аппаратной точки останова) активи-
                   зируйте "кнопку" Hardware;

                 - выберите в диалоговом окне нужный параметр (параметры
                   описываются в текстовом файле HDWDEBUG.TD).

                       Регистрация значений переменных
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Иногда может  оказаться полезным регистрировать значения оп-
       ределенных переменных каждый раз,  когда вы достигаете определен-
       ного места программы.  Вы можете регистрировать  значение  любого
       выражения,  включая,  например,  значения  параметров  при вызове
       функции.  Просматривая регистрацию при каждом вызове функции,  вы
       можете определить, когда эта функция вызывается с неверными пара-
       метрами.

       TDeb 3.0 #1-3               = 192 =


            Выберите селективный  переключатель Log (Регистрация) диало-
       гового окна Breakpoint Options (Параметры точки останова).  В от-
       вет  на выводимую подсказку введите выражение,  значение которого
       должно регистрироваться при каждом срабатывании  точки  останова.
       Если  вы  хотите  регистрировать  значение нескольких переменных,
       нужно установить несколько точек останова.

                 Примечание: При регистрации выражений  нужно  учитывать
            побочные эффекты.



       TDeb 3.0 #1-3               = 193 =

                          Точки останова и шаблоны
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Турбо отладчик поддерживает шаблоны C++.  Точки останова ус-
       танавливаются по-разному, в зависимости от использования F2 в ок-
       не Module,  в окне CPU или задании их с помощью диалогового  окна
       Breakpoint Options.

                      Точки останова и классы шаблонов
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Для задания точек останова в шаблонах имеется несколько  ме-
       тодов:

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

            - Если вы установили точку останова в шаблоне, нажав клавиши
              Alt-F2 для вывода диалогового окна Breakpoint Options (Па-
              раметры точки останова),  то ввод в окне Module адреса вы-
              ражения  шаблона выводит диалоговое окно,  позволяющее вам
              выбрать экземпляр класса,  для которого вы хотите  устано-
              вить точку останова.

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

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



       TDeb 3.0 #1-3               = 194 =

                      Точки останова в шаблонах функций
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

          Точки останова в шаблонах экземпляров классов и объектов
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Аналогично обычным классам и объектам,  вы можете установить
       точки останова в шаблонах экземпляров классов и объектов.

                                  Окно Log
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Log  (Регистрация)  можно   создать,   выбрав   команду
       ViewіLog (ОбзоріРегистрация).  Это окно позволяет вам просмотреть
       список значащих событий,  которые имели место во время сеанса от-
       ладки.

                Й[*]НLogНННННННННННННННННННННННННН3НН[ ][ ]НН»
                єAt MCINPUT.124                              ^
                єBreakpoint at TPDEMO.220                    І
                єBreakpoint at TPDEMO.220                    °
                єBreakpoint at TPDEMO.220                    °
                єBreakpoint at TPDEMO.220                    °
                єBreakpoint at TPDEMO.220                    °
                єBreakpoint at TPDEMO.220                    °
                єBreakpoint at TPDEMO.220                    °
                єWe are now entering procedure Params...     °
                єBreakpoint±at±TPDEMO.180±±±±±±±±±±±±±±±±±±±±v
                И<І°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°>ДЅ

            Рис. 7.6 Окно Log

            В окне  Log  (Регистрация)  выводится  пролистываемый список
       строк (вывод в окно).  Если зарегистрировано более 50  строк,  то
       самые  старые  строки списка теряются.  Для настройки числа строк
       используйте параметр командной строки при запуске Турбо отладчика
       или  измените  это число с помощью программы установки TDINST.  С
       помощью команды локального меню Open Log File (Открыть  файл  ре-
       гистрации)  можно сохранить всю регистрацию,  записывая ее непре-
       рывно в файл на диске.

            Перечислим, какие причины могут вызвать запись строк в  про-
       токол регистрации:

            - Ваша программа остановилась по заданному адресу.  Адрес ее
              останова регистрируется.


       TDeb 3.0 #1-3               = 195 =

            - Вы дали команду локального меню Add Comment (Добавить ком-
              ментарий).  Выводится  подсказка,  по которой нужно ввести
              комментарий, регистрируемый в протоколе.

            - Срабатывает точка останова,  которая регистрирует значение
              выражения. Это значение помещается в протокол регистрации.

            - Вы  использовали команду WindowіDump Pane To Log (ОкноіВы-
              вод области в протокол регистрации)  (из  основного  меню)
              для записи текущего содержимого области окна.

            - Вы  отлаживаете прикладную программу для Microsoft Windows
              и использовали команду ViewіWindows Messages  (ОбзоріСооб-
              щения Windows) для вывода окна Windows Messages,  и теперь
              находитесь в локальном меню области Messages  этого  окна.
              Вы переключаете  параметр  Send  to Log Window (Передача в
              окно регистрации) в значение Yes (Да),  чтобы все приходя-
              щие в данное окно сообщения также отображались в Log.

            - Вы  отлаживаете прикладную программу для Microsoft Windows
              и используете команду Display Window Info (Вывод  информа-
              ции  Windows) локального меню окна Log для записи в журнал
              информации о глобальной динамически распределяемой области
              памяти,  информации о локальной динамически распределяемой
              области или списка модулей.



       TDeb 3.0 #1-3               = 196 =

                           Локальное меню окна Log
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Локальное меню окна Log (Регистрация) выводится  при нажатии
       клавиш Alt-F10. Если разрешено использовать сокращения с клавишей
       Ctrl, то для непосредственного доступа к команде этого меню можно
       нажать клавишу Ctrl совместно с первой буквой нужной команды.

                                      ЪДДДДДДДДДДДДДДДДДДДДДДДДї
            Открыть файл регистрации  і Open log file...       і
            Закрыть файл регистрации  і Close log file         і
            Регистрация               і Logging        YES     і
            Добавить комментарий      і Add comment...         і
            Стереть файл регистрации  і Erase log              і
            Вывести информацию        і Display Windows Info...і
             Windows                  АДДДДДДДДДДДДДДДДДДДДДДДДЩ

                          Команда Open Log File...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            По команде  Open  Log  File  (Открыть  файл регистрации) все
       строки, записываемые в протокол регистрации, записываются также в
       файл на диске.  Вам выводится подсказка с запросом имени файла, в
       который нужно записывать протокол регистрации.

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

            Если вы хотите начать регистрацию на диске, не включая в нее
       строки,  которые уже выведены на экран,  то перед выбором команды
       Open File Log (Открыть файл регистрации) выберите сначала команду
       Erase Log File (Стереть файл регистрации).



       TDeb 3.0 #1-3               = 197 =

                           Команда Close Log File
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Close Log File (Закрыть файл регистрации) останавли-
       вает запись строк в файл регистрации,  заданный в команде локаль-
       ного меню Open Log File (Открыть файл регистрации).  Данный  файл
       закрывается.


                               Команда Logging
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Logging (Регистрация) разрешает  или  запрещает  ре-
       гистрацию, управляя выводом в окно Log (Регистрация).


                             Команда Add Comment
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Add Comment  (Добавить  комментарий)  позволяет  вам
       включить  в  регистрируемую  информацию  комментарий.  В ответ на
       подсказку можно ввести строку  текста,  которая  может  содержать
       столько символов, сколько вам требуется.


                              Команда Erase Log
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Erase Log (Стереть регистрацию) очищает  список  ре-
       гистрации.  Окно Log (Регистрация) заполняется пробелами.  Это не
       влияет на запись регистрации в файл на диске.


                        Команда Display Windows Info
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Данная команда  выводит  диалоговое окно Windows Information
       (Информация Windows),  позволяющий получить информацию о глобаль-
       ной  и  локальной  динамически  распределяемой области памяти или
       списке модулей,  входящих в вашу прикладную программу. Это средс-
       тво описано подробнее в Главе 17.





       TDeb 3.0 #1-3               = 198 =

                   Глава 8. Просмотр и модификация файлов
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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


                     Просмотр исходных файлов программы
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                 Примечание: Загрузка и отладка модулей Windows DLL опи-
            сывается в Главе 17.

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

            Файлы, включенные в исходный файл с использованием директивы
       компилятора, которая генерирует номера строк (аналогично директи-
       ве #include в языке Си и INCLUDE в Ассемблера) также рассматрива-
       ются, как исходные файлы программы. Для просмотра исходных файлов
       программы всегда нужно использовать  окно  ViewіModule  (ОкноіМо-
       дуль),  поскольку это указывает Турбо отладчику,  что файл предс-
       тавляет собой исходный модуль.  Для выбора одного из файлов нужно
       использовать команду локального меню File (Файл).



       TDeb 3.0 #1-3               = 199 =

                                 Окно Module
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно Module (Модуль) можно создать,  выбрав в  главном  меню
       команду ViewіModule (ОбзоріМодуль) (или нажав клавишу F3).

         ЙН[*]НModule: TPDEMO File: TPDEMO.PAS 217 НННННННННННННННННННН»
         є      end;                                                   ^
         є   Writeln;                                                  І
         є  end; { ParmsOnHeap }                                       ±
         є                                                             ±
         є> begin                                                      ±
         є    Init;                                                    ±
         є    Buffer := GetLine;                                       ±
         є    while Buffer <> '' do                                    ±
         є    begin                                                    ±
         є      ProcessLine(Buffer);                                   ±
         є      Buffer := GetLine;                                     ±
         є    end;                                                     ±
         є    ShowResult;                                              ±
         є    ParmsOnHeap;                                             ±
         є  end.                                                       ±
         є                                                             ±
         є                                                             ±
         є                                                             ±
         є                                                             v
         И<±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щ

            Рис. 8.1 Окно Module

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

            Если вы отлаживаете прикладную программу Windows,  в  данном
       диалоговом окне выводится список, в котором показаны модули прог-
       раммы, и список, в котором показаны файлы DLL и .EXE, загруженные
       в данный момент Windows.

                 Примечание: При запуске отладчика TDW вам требуется как
            файл .EXE, так и исходные текстовые файлы, а также выполняе-
            мый  и  исходный код всех написанных для программы библиотек
            DLL.

            При этом Турбо отладчик загрузит  исходный  файл  выбранного
       модуля. Поиск исходного файла он выполняет в следующем порядке:

            1. В каталоге, в котором находится выполняемый файл компиля-
               тора.

            2. В каталогах,  заданных командой  OptionsіPath  (Параметры
               іМаршрут) для команды Source (Исходный модуль), или в па-
               раметре командной строки -sd.


       TDeb 3.0 #1-3               = 200 =

            3. В текущем каталоге.

            4. В каталоге, где содержатся отлаживаемые программы.

            В окне Module (Модуль) выводится содержимое  исходного файла
       выбранного модуля. В заголовке окна Module показывается имя прос-
       матриваемого модуля,  имя исходного файла и номер строки, в кото-
       рой находится  курсор.  Текущий  адрес  программы (CS:IP) отмечен
       символом стрелки (>) в первой позиции окна.

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

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


                         Локальное меню окна Module
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            В локальном меню окна Module (Модуль) предусмотрено несколь-
       ко команд,  позволяющих вам перемещаться в указанном модуле, ссы-
       латься на элементы данных и проверять их, а также выводить в окно
       новый файл или модуль.

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

            Для вывода локального меню данного окна  можно  использовать
       комбинацию клавиш Alt-F10. Если разрешено использовать сокращения
       с клавишей Ctrl, то для непосредственного доступа к команде этого
       меню можно  нажать клавишу Ctrl вместе с первой буквой нужной ко-
       манды (например, при нажатии Ctrl-S вызовется команда Search).

                                               ЪДДДДДДДДДДДДї
                   Проверка                    і Inspect    і
                   Просмотр                    і Watch      і
                                               ГДДДДДДДДДДДДґ
                   Модуль                      і Module...  і
                   Файл                        і File...    і
                                               ГДДДДДДДДДДДДґ
                   Предыдущий                  і Previous   і
                   Строка                      і Line...    і
                   Поиск                       і Search...  і

       TDeb 3.0 #1-3               = 201 =

                   Следующий                   і Next...    і
                   Начало                      і Origin     і
                   Переход                     і Goto...    і
                   Редактирование              і Edit       і
                                               АДДДДДДДДДДДДЩ

                               Команда Inspect
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Inspect (Проверка) открывает окно проверки,в котором
       выводится содержимое переменной программы,  расположенной в теку-
       щей позиции курсора. Перед тем как дать эту команду вы можете по-
       местить курсор в исходном файле на одну из  переменных программы,
       или ввести ее имя в поле ввода выводимого диалогового окна.

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

                                Команда Watch
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                 Примечание: Если курсор не находится на переменной, вам
             выведется подсказка для ее ввода.


                              Команда Module...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Module (Модуль) позволяет вам просмотреть другой мо-
       дуль  (который  можно выбрать из выводимого списка модулей).  Эту
       команду полезно использовать,  когда вас больше не интересует те-
       кущий модуль, но вы не хотите открывать еще одно окно Module.


                               Команда File...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда File  (Файл) позволяет вам переключиться на просмотр
       того или иного исходного файла,  входящего в состав просматривае-
       мого  модуля.  Выберите файл,  который вы хотите просмотреть,  из
       списка файлов.  Большинству модулей соответствует  один  исходный
       файл,  в котором находится весь исходный код. В других включаемых
       в данный файл файлах содержатся обычно только определенные  конс-
       танты и структуры данных. Используйте данную команду, если исход-
       ный код вашего модуля содержится в нескольких файлах.

       TDeb 3.0 #1-3               = 202 =


            Если вы  хотите просматривать одновременно несколько файлов,
       то для  создания другого окна File (Файл) используйте команду ос-
       новного меню ViewіAnotherіFile (ОбзоріДругойіФайл), или для того,
       чтобы просмотреть первый файл - команду ViewіFile (ОбзоріФайл).


                              Команда Previous
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Previous (Предыдущий) возвращает вас в последний ис-
       ходный модуль,  который вы просматривали. Эту команду можно также
       использовать для возврата к предыдущему месту после того,  как вы
       дали команду, которая изменила позицию в текущем модуле.


                               Команда Line...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Line (Строка) позиционирует вас в файле на  строку с
       другим номером.  Введите номер новой строки, на которую вы хотите
       перейти.  Если вы введете номер строки, превышающий число строк в
       файле, во эта команда переместит вас на последнюю строку файла.


                              Команда Search...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            При поиске допускается задавать простые трафаретные символы:
       ?,  задающий один символ, и *, показывающую 0 или более символов.
       При достижении конца файла поиск не будет продолжен с его начала.
       Чтобы выполнить поиск по всему файлу, перейдите на начало файла с
       помощью клавиш Ctrl-PgUp.


                                Команда Next
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Next (Следующий) выполняет поиск следующего  вхожде-
       ния  символьной  строки,  которую вы задали в команде Search (По-
       иск). Эту команду можно использовать только после команды Search.

            Иногда команда поиска,  найдя соответствие,  останавливается
       не  на  нужной строке,  а нужная строке находится дальше в файле.
       Команда Next позволяет вам возобновить поиск без повторного ввода

       TDeb 3.0 #1-3               = 203 =

       искомой строки.


                               Команда Origin
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Origin (Начало) позиционирует вас на  тот  модуль  и
       номер  строки,  которые  соответствуют  текущему адресу программы
       (определяемому содержимым регистров CS:IP).  Если просматриваемый
       в данный момент модуль не является  модулем,  содержащим  текущий
       адрес программы, окно Module (Модуль) переключится, и будет выве-
       ден нужный модуль.  Данную команду полезно использовать после то-
       го,  как  вы  просмотрели  исходный код и хотите вернуться к тому
       месту, где в данный момент остановилась программа.




       TDeb 3.0 #1-3               = 204 =

                               Команда Goto...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Эту команду можно вызвать, если просто начать вводить метку,
       на которую вы хотите перейти. Это приведет к выводу окна подсказ-
       ки (как  если бы вы использовали команду RunіExecute to (Выполне-
       ниеіВыполнение до курсора)).  Для часто используемой команды  это
       является удобным сокращением.

                 Примечание: Если  адресу не соответствует строка исход-
            ного кода, то открывается окно CPU.


                                Команда Edit
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Edit (Редактирование) позволяет выбрать  редактор, с
       помощью которого вы можете внести изменения в исходный файл прос-
       матриваемого модуля.  Задать команду,  запускающую ваш  редактор,
       можно с помощью программы установки  параметров  Турбо  отладчика
       TDINST.


                       Просмотр других файлов на диске
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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




       TDeb 3.0 #1-3               = 205 =

                                  Окно File
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Окно File  (Файл)  можно  создать,  выбрав команду ViewіFile
       (ОбзоріФайл) из основного меню.  Для получения списка файлов  для
       выбора допускается использовать трафаретные символы DOS.

           Й[*]НFile: C:\tc\doc.h 197НННННННННННННННННННННННН[ ][ ]»
           є char _Cdecl peekb (unsigned segment, unsigned offset);^
           є void _Cdecl poke  (unsigned segment, unsigned offset, І
           є void _Cdecl pokeb (unsigned segment, unsigned offset, ±
           є int  _Cdecl randbrd (struct fcb *fcb, int rcnt);      ±
           є int  _Cdecl segread (struct fcb *fcb, int rcnt);      ±
           є void _Cdecl setblock(unsigned segx, unsigned newsize);±
           є int  _Cdecl setcbrk (int cbrkvalue);                  ±
           є int  _Cdecl setdate (struct date *datep);             ±
           є void _Cdecl setswrichar  (char ch);                   ±
           є void _Cdecl settime (struct time *timep);             ±
           є void _Cdecl setvect (int interruptno, void interrupt (±
           є void _Cdecl setverify   (int value);                  ±
           є void _Cdecl sleep (unsigned seconds);                 ±
           є void _Cdecl sound (unsigned frequency);               v
           И<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щ

            Рис. 8.2 Окно File

            В окне File (Файл) выводится содержимое выбранного вами фай-
       ла. Имя просматриваемого файла,  а также номер строки, на которой
       в файле находится курсор, выводится в заголовке окна (как текст в
       коде ASCII).

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


       TDeb 3.0 #1-3               = 206 =


           Й[*]НFile: C:\tc\doc.h 197НННННННННННННННННННННННН[ ][ ]»
           є0000: 2f 2a 09 64 6f 73 2e 68 і* dis.h                 ^
           є0008: 0d 0a 0d 0a 09 44 65 66      Def                 І
           є0010: 69 6e 65 73 20 73 74 72 ines str                 ±
           є0018: 75 63 74 73 2c 20 75 6e ucts, un                 ±
           є0020: 69 6f 6e 73 2c 20 6d 61 lons, ma                 ±
           є0028: 63 72 6f 73 2c 20 61 6e cros, an                 ±
           є0020: 63 20 66 75 6e 63 74 69 d functi                 ±
           є0038: 6f 6e 73 20 74 6e 67 0d ons for                  ±
           є0040: 64 65 61 6c 20 68 6e 4d dealing                  ±
           є0048: 0a 09 77 69 20 61 20 4d   with M                 ±
           є0050: 53 44 4f 53 41 49 6e 64 SDOS and                 ±
           є0058: 20 74 68 65 63 50 6e 74  the Int                 ±
           є0060: 65 6c 20 69 50 72 58 38 el iAPx8                 ±
           є0068: 36 20 6d 69 41 72 6f 70 6 microp                 ±
           є0070: 72 6f 63 65 63 73 6f 72 rocessor                 v
           И<І±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±>Щ

            Рис. 8.3 Окно File с выводом шестнадцатиричных данных


                          Локальное меню окна File
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Локальное меню окна File (Файл) содержит команды для переме-
       щения по файлу на диске,  изменения характера вывода  содержимого
       файла на экран и внесения в файл изменений.

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

                 ЪДДДДДДДДДДДДДДДДДДДї
                 і Goto...           і   Переход
                 і Search...         і   Поиск
                 і Next              і   Следующий
                 ГДДДДДДДДДДДДДДДДДДДґ
                 і Display as  Ascii і   Вывести в виде...
                 і File...           і   Файл
                 і Edit              і   Редактирование
                 АДДДДДДДДДДДДДДДДДДДЩ


                                Команда Goto
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Эта команда позиционирует вас на строку с другим номером или
       смещением.  Если  вы просматриваете файл в текстовом виде (в коде
       ASCII),  введите номер строки, на которую вы хотите перейти. Если
       вы просматриваете текст в виде  шестнадцатиричных  байт,  введите
       смещение  относительно начала файла,  с которого вы хотите начать

       TDeb 3.0 #1-3               = 207 =

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

                               Команда Search
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

            Если файл выводится в коде ASCII, при поиске допускается за-
       давать простые трафаретные символы: ?, задающий один символ, и *,
       показывающую 0 или более символов.

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

            Например, в языке Си список байт,  состоящий из шестнадцати-
       ричного числа 0408, вводится следующим образом:

            Ox0884

            Если текущим языком является Паскаль,  то тот же список байт
       вводится так:

            $0804

                 Примечание: Полная  информация о списках байт приведена
            в Главе 9.

            При достижении конца файла поиск не будет  продолжен  с  его
       начала. Чтобы выполнить поиск по всему файлу, перейдите на начало
       файла с помощью клавиш Ctrl-PgUp.

            Вы можете вызвать эту команду, просто начав набирать строку,
       которую хотите найти.  При этом,  как при команде Search (Поиск),
       будет выведено окно подсказки.

                                Команда Next
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Next  (Следующий) выполняет поиск следующего вхожде-
       ния символьной строки,  которую вы задали в команде  Search  (По-
       иск).  Эту команду можно использовать только после команды Search

       TDeb 3.0 #1-3               = 208 =

       (Поиск).

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


                             Команда Display As
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда Display As (Вывести как...)  позволяет переключаться
       между выводом файла в виде текста ASCII и в шестнадцатиричном ви-
       де.  При выборе вывода на экран в коде ASCII файл выводится в та-
       ком виде, как вы видите его при работе с редактором или текстовым
       процессором.  Если вы выберете  шестнадцатиричный  вывод,  каждая
       строка будет начинаться с шестнадцатиричного смещения в файле. На
       строке может выводиться 8 или 16 байт данных,  в  зависимости  от
       ширины области окна. Справа от шестнадцатиричного вывода байт вы-
       водятся соответствующие каждому байту символы.Поскольку может вы-
       водиться полный набор символов,  байтовые значения < 32 или > 127
       выводятся на экран в виде соответствующих символов.


                               Команда File...
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Команда File (Файл) позволяет вам переключиться  на просмотр
       другого файла. Для получения списка файлов для выбора допускается
       использовать трафаретные символы DOS, либо можно ввести имя конк-
       ретного файла,  который и будет загружен. Если вы хотите просмат-
       ривать на экране два различных файла одновременно,  то для созда-
       ния    другого    окна    File    (Файл)    используйте   команду
       ViewіAhotherіFile (ОбзоріДругойіФайл).


                                Команда Edit
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Если вы просматриваете файл в  виде  текста  ASCII,  команда
       Edit  (Редактирование)  позволяет  вам  вносить в файл изменения,
       вызвав редактор, выбранный с помощью программы установки парамет-
       ров отладчика TDINST.

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

                Примечание: Полное  описание  списков  байт содержится в
            Главе 9.




Яндекс цитирования