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

         

вы должны сделать после запуска


            Первое, что  вы должны сделать после запуска Турбо отладчика
       из 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   ¦

Диалоговое окно Load Program


            L====================================================-
            Рис. 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          ¦    мотра
              L---------------------------    Возврат результата функции
                             Команда 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                                     ------  ¦
            ¦ <not avaliable>-------------------------   Help    ¦
            ¦                                            ------  ¦

что после выражения, которое вы


            ¦ New value                                  Modify  ¦
            ¦ <not avaliable>-------------------------   ------  ¦
            ¦ ----------------------------------------           ¦
            ¦ ----------------------------------------           ¦
            ¦                                                    ¦
            L====================================================-
            Рис. 6.1 Диалоговое окно Evaluate/Mofify
            Expression - выражение;  Result - результат; New value - но-
       вое значение;  not avaliable  -  недоступно;  Eval  -  вычислить;
       Cancel - отменить; Help - справка; Modify - модифицировать.
            Нужно помнить о том,  что после выражения, которое вы хотите
       просмотреть, можно добавить строку управления форматом. (О строке
       управления  форматом рассказывается в Главе 9.) Этим полезно вос-
       пользоваться, когда вы хотите просмотреть что-либо, что выводится
       в формате,  отличном от используемого Турбо отладчиком по умолча-
       нию режима вывода на экран для этого типа данных.  Для вывода ре-
       зультата в другом формате укажите после выражение разделитель-за-
       пятую (,),  затем строку управления форматом. Это полезно исполь-
       зовать, когда  вы  хотите что-либо просмотреть,  но вывести это в
       другом формате,  отлично от того,  который используется Турбо от-
       ладчиком по умолчанию.
            Диалоговое окно содержит три области (поля).
            - Выражение,  которое  вы  хотите вычислить,  можно ввести в
              верхней области.  Это область ввода Evaluate.  Как  и  все
              другие подсказки ввода, эта область содержит протокол (вы-
              полняемых действий).
            - В  средней  области  выводится результат вычисления вашего
              выражения.
            - Нижняя  область  - это область ввода,  в которой вы можете
              ввести новое выражение для вычисления.  Если выражение мо-

в поле ввода New Value


              дифицировать нельзя, то в данное области выводится сообще-
              ние <not avaliable> (недоступно).
            Запись в поле ввода 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, вычислите выражение Си 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
       L<------------------------------------------------------------>--

Для создания окна Watches выберите


            Рис. 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        ¦              Изменение
                    L----------------
                              Команда 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)--------¦

Cкалярное окно Inspector языка


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

Окно Inspector для указателей


                    ¦<-------------------------------------->¦
                    ¦char *                                  ¦
                    L========================================-
            Рис. 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)  -

Inspector для структуры или объединения


                         ¦<----------------------------------->v
                         ¦struct linfo                         ¦
                         L=====================================-
            Рис. 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}  -

Окно Inspector для массивов


                  ¦[5]                              {1,0}  -
                  ¦[6]                              {1,0}  v
                  ¦<-------------------------------------->¦
                  ¦struct linfo [26]                       ¦
                  L========================================-
            Рис. 6. 6 Окно Inspector для массивов (для языка Си)

       TDeb 3.0 #1-3               = 155 =
                                   Функции
       -----------------------------------------------------------------
            В окне проверки для функции показан каждый параметр, с кото-
       рым вызывается функция.  Параметры выводятся в верхней части окна
       под адресом памяти.
                  г[*]=Inspecting analyzewords=3=[ ][ ]=====¬
                  ¦071E9:02DD-------------------------------¦
                  ¦char *bufp                               ¦
                  ¦<--------------------------------------->¦
                  ¦ long ()                                 ¦
                  L=========================================-
            Рис. 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)-----¦
                     L<-------------------------------->--
            Рис. 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                     ¦
                      L===============================-
            Рис. 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)  ¦

Окно Inspector для массивов


                  ¦['D']                            (2,0)  ¦
                  ¦['E']                            (2,0)  ¦
                  ¦['F']                            (2,0)  ¦
                  ¦<-------------------------------------->¦
                  ¦array ['A'..'Z'] of record LINFOREC     ¦
                  L========================================-
            Рис. 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                                ¦
                  L========================================-
            Рис. 6.11 Окно Inspector для записи (для языка Паскаль)
                             Функции и процедуры
       -----------------------------------------------------------------
            В окне Inspector для процедуры или функции в верхней области

а также определяется тип данных,


       выводится информация о параметрах вызова.  Эти окна имеют  вторую
       область,  в  которой  подпрограмма идентифицируется как процедура
       или функция,  а также определяется тип данных, возвращаемых функ-
       цией.
                    г[*]=Inspecting ProcessLine==3=[ ][ ]¬
                    ¦$8340:0486--------------------------¦
                    ¦S : BUFFERSTR                       ¦
                    ¦<---------------------------------->¦
                    ¦PROCEDURE                           ¦
                    L====================================-
            Рис. 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) ¦
                    L<----------------------------------->-
            Рис. 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                          ¦
                     L==================================-
            Рис. 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]                      ¦
                       L===============================-
            Рис. 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       <?,1.0>

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

Окно Inspector для структуры


                       г[*]=Inspecting Names==3=[ ][ ]¬
                       ¦$72ED:001D--------------------¦
                       ¦firstname   "Carleton       " ¦
                       ¦lastname    "Whitehall      " ¦
                       ¦age             '#'  35 (23h) ¦
                       ¦sex             'M'  77 (4Dh) ¦
                       ¦<---------------------------->¦
                       ¦struc namedata                ¦
                       L==============================-
            Рис. 6. 16 Окно Inspector для структуры (для Ассемблера)

       TDeb 3.0 #1-3               = 164 =
                        Локальное меню окна Inspector
       -----------------------------------------------------------------
            Команды локального меню окна Inspector (Проверка) показывают
       реальные  возможности  этого окна.  Путем выбора данных команд вы
       можете, например, создавать другое окно проверки, позволяющее уг-
       лубляться в структуры данных. Другие команды этого меню позволяют
       вам проверить диапазон значений и проанализировать новую перемен-
       ную.
                                    --------------------¬
              Диапазон              ¦ Range...          ¦
              Изменение             ¦ Change...         ¦
                                    +-------------------+
              Проверка              ¦ Inspect           ¦
              Спуск                 ¦ Descend           ¦
              Новое выражение       ¦ New Expression... ¦
              Преобразование типа   ¦ Type cast...      ¦
                                    L--------------------
                              Команда 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                ¦
                         L===========================-
                               Команда 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                             ¦
             ¦            ¦                                     ¦
             ¦            ¦                                     ¦
             ¦            ¦                                     ¦
             L<----------->=====================================-

список точек останова) показан список


            Рис. 7.1 Окно Breakpoints
            В окне Breakpoints (Точки останова) имеется две  области.  В
       левой  области  ( список точек останова) показан список всех адре-
       сов,  где установлены точки останова. В правой области (подробная
       информация  о точках останова) показаны подробные данные по теку-
       щим (подсвеченным в левой области) точкам останова.
            Локальное меню окна Breakpoints,  которое можно получить  по
       нажатию клавиш Alt-F10, имеется только в области списка точек ос-
       танова. Если разрешено использование сокращений с  клавишей Ctrl,
       то нажатие  этой  клавиши с первой буквой команды позволяет полу-
       чить непосредственный доступ к команде.
                       Локальное меню окна Breakpoints
       -----------------------------------------------------------------
            Команды данного меню позволяют вам добавлять новые точки ос-
       танова,  отменять существующие или  изменять  характер  поведения
       имеющихся точек останова.
                    ----------------------¬
                    ¦ Set Options...      ¦  Установить параметры
                    ¦ Add...              ¦  Добавить
                    ¦ Remove              ¦  Удалить
                    ¦ Delete all          ¦  Удалить все
                    ¦ Inspect             ¦  Проверить
                    ¦ Group...            ¦  Группа
                    L----------------------
                            Команда 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                     ¦
            ¦  -----   ------   ------   ------                      ¦
            L========================================================-
            Рис. 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------------     ------ ¦
                    ¦                                     ¦
                    L=====================================-
            Рис. 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--                  ¦
            L========================================================-
            Рис. 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   (Глобальная),  будучи  установленным,
       разрешает глобальную проверку.  Это означает,  что при каждом вы-
       полнении строки  исходного  кода  будет проверяться условие точки
       останова.

Поскольку глобальные  точки  останова  проверяются 


Поскольку глобальные  точки  останова  проверяются  при
       каждом выполнении строки исходного кода, поле адреса, так как оно
       больше не нужно,  устанавливается в значение <not avaliable> (не-
       доступно).
                 Примечание: Более подробно о глобальных точках останова
            см. далее.
            Когда вы устанавливаете глобальную точку останова, нужно за-
       дать условие,  которое  приведет  к ее срабатыванию.  В противном
       случае у вас получится точка останова,  которая будет срабатывать
       на каждой  строке  исходного кода (если вы хотите добиться такого
       эффекта, используйте команду основного меню Run¦Trace (Выполнение
       ¦Трассировка).
                           Переключатель Disabled
       -----------------------------------------------------------------
            Этот блок проверки выключает текущую  точку  останова.  Хотя
       этот переключатель  аналогичен команде Toggle (Переключение) меню
       Breakpoints (см. выше), Disable не сбрасывает параметры точки ос-
       танова (как это происходит по команде Toggle). Disable просто ус-
       танавливает маску точки останова,  пока вы не разрешите ее, пере-
       установив данный переключатель.  Когда точка останова вновь будет
       разрешена, все ее установленные ранее параметры снова будут дейс-
       твовать.

       TDeb 3.0 #1-3               = 179 =
            Данный переключатель  полезно использовать,  когда вам нужно
       определить сложную точку останова, которую вы не хотите использо-
       вать немедленно,  но захотите использовать позднее.  Он позволяет
       вам избежать необходимости удаления точки останова  и последующей
       ее установки со сложными условиями и действиями.
                      Поле списка Condition and Action
       -----------------------------------------------------------------
            Поле списка Condition and Action (Условие и действие)  выво-
       дит набор условий и действий,  связанных с текущей точкой остано-

вое поле Conditions and Actions


       ва.
                               "Кнопка" 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 and


            ¦ Conditions expression   Action expression              ¦
            ¦ --i == 2--------------- -Break----------------  Help   ¦
            ¦ ----------------------- ----------------------  ------ ¦
            ¦ ----------------------- ----------------------         ¦
            ¦                                                        ¦
            ¦ -Add-----   -Delete--   --Add---   -Delete--           ¦
            ¦                                                        ¦
            ¦                         Pass count                     ¦
            ¦ -Hardware...---         -1--------------------         ¦
            L========================================================-
            Рис. 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 не будут добавлены все


               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  (Запрещение
       группы) должен быть предусмотрен набор действий,  благодаря кото-
       рым Турбо отладчик будет знать, что нужно делать при срабатывании
       точки останова. Набор действий может состоять из нескольких дейс-
       твий: