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

         

Разрешение группы) или Disable Group 


            Чтобы добавить к точке  останова  набор  действий,  сделайте
       следующее:
            1. Выберите  селективный переключатель Execute (Выполнение),
               Enable Group ( Разрешение группы) или Disable Group  (Зап-
               рещение группы).
            2. Выберите "кнопку" Add (Добавление), которая находится под
               текстовым полем Action Expression.
            3. Введите действие в текстовое поле Action Expression  (Вы-
               ражения действия).
               Если вы хотите, чтобы при срабатывании точки останова вы-
               полнялось несколько действий,  повторите шаги 2 и 3, пока
               все  они  не  будут  добавлены  в  текстовое  поле Action
               Expression.
            4. Когда вы закончите вводить действия,  выберите в диалого-
               вом окне Conditions and Actions "кнопку" OK.
            Если вы выбрали селективные переключатели Enable Group (Раз-
       решение группы) или Disable Group (Запрещение группы), для указа-
       ния  группы,  которую  вы ходите разрешить или запретить,  просто
       введите в текстовое поле Action Expression номер группы.
            "Кнопка" Delete (Удаление),  которая находится под текстовым



       TDeb 3.0 #1-3               = 187 =
       полем Action Expression, позволяет вам удалить текущее условие из
       набора условий.
                          Поле ввода Pass Count...
       -----------------------------------------------------------------
            Поле ввода Pass Count (Счетчик проходов) задает, сколько раз
       данное действие должно быть обнаружено перед тем,  как оно срабо-
       тает. Значение счетчика уменьшается только в том случае, если со-
       ответствующее точке останова условие принимает истинное значение.
       Это означает,  что если наряду с условием установили счетчик про-
       ходов, то точка останова сработает, когда условие n-ый раз примет
       истинное значение.

что вы можете останавливать  свою 



       TDeb 3.0 #1-3               = 188 =
                          Настройка точек останова
       -----------------------------------------------------------------
            Кроме того,  что вы можете останавливать  свою  программу  в
       конкретной точке,  вы  можете  расширить  возможности управления,
       обусловив остановку программу выполняемым по точке останова дейс-
       твием.
                           Простые точки останова
       -----------------------------------------------------------------
            При первоначальной установки точки останова она имеет назна-
       чаемые по умолчанию параметры Always Break. После установки точки
       останова выполняемые по ней действия и  условия  ее  срабатывания
       можно настроить. Точки останова можно задать несколькими способа-
       ми, каждый из них удобно использовать в определенных  обстоятель-
       ствах.
            1. Переместите курсор на нужную строку исходного кода (в ок-
               не Module или в области кода окна CPU)  и  дайте  команду
               Breakpoints¦Toggle (Точки останова¦Переключение) или наж-
               мите клавишу F2 (можно также  щелкнуть  кнопкой  "мыши").
               Если  дать  эту команду на строке,  где уже имеется точка
               останова, то эта точка останова будет удалена.
            2. Дайте команду локального меню Add  (Добавить)  в  области
               списка  точек  останова  окна Breakpoints и введите адрес
               кода,  по которому вы ходите задать точку останова. Адрес
               кода имеет тот же формат,  что и формат указателя исполь-
               зуемого языка.  Подробнее о выражениях  рассказывается  в
               Главе 9.
            3. Чтобы  установить точку останова на текущей строке в окне
               Module, дайте команду Breakpoints¦At  (Точки  останова¦По
               адресу...).
                          Глобальные точки останова
       -----------------------------------------------------------------

будет проверять  точку  останова на


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

       TDeb 3.0 #1-3               = 189 =
       программа работает с данными.
                 Примечание: Быстрый способ задания глобальной точки ос-
            танова  предлагает  окно  Breakpoints.  Подробнее о командах
            Changed Memory Global и Expression True Global рассказывает-
            ся выше.
            Часто глобальные  точки останова используются для отслежива-
       ния изменения значения элемента данных. В этой ситуации Турбо от-
       ладчик проверяет  область  памяти  на  изменение после выполнения
       каждой строки кода.  В качестве альтернативы глобальной точке ос-
       танова вы  можете задать точку останова,  которая отслеживает из-
       менение только при достижении определенного оператора. Это намно-
       го более  эффективно,  поскольку существенно число операций Турбо
       отладчика, которые он должен выполнять для  обнаружения изменения
       (в этом случае Турбо отладчику не важно,  где изменяется элемент,
       а важен сам факт его изменения).
                   Остановка при изменении объектов данных
       -----------------------------------------------------------------
            Когда вы хотите определить, где в вашей программе изменяются

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


       определенные объекты данных, сначала с помощью одного из методов,
       описанных в предыдущем разделе, установите глобальную точку оста-
       нова.  Затем можно использовать селективный переключатель Changed
       Memory   (Измененная  память)  диалогового  окна  Conditions  and
       Actions (Условия и действия).  Введите выражение,  ссылающееся на
       область  памяти,  которую  вы хотите отслеживать и необязательный
       счетчик числа отслеживаемых объектов. Общее число байт отслежива-
       емой области соответствует произведению размера объекта, на кото-
       рое ссылается выражение,  на число объектов.  Предположим, напри-
       мер, что у вас имеется следующий массив Си:
            int string[81];
            Если вы  хотите отследить изменение первого элемента данного
       массива, введите в поле ввода Condition Expression следующий эле-
       мент:
            &sting[0], 10
            Наблюдаемая область памяти имеет длину 20 байт, так как зна-
       чение int занимает два байта, а вы задали отслеживание 10 байт.
            Если точка останова по изменению памяти (Changed Memory) яв-
       ляется глобальной, то ваша программа будет выполняться существен-
       но медленнее,  поскольку область памяти будет проверяться при вы-
       полнении каждой строки исходного кода.
            Если у вас установлен аппаратный драйвер, Турбо отладчик для
       отслеживания изменений в области данных попытается установить ап-
       паратную точку останова. Различные аппаратные отладчики поддержи-
       вают  различное число и типы аппаратных точек останова.  Увидеть,

       TDeb 3.0 #1-3               = 190 =
       используются ли  для точки останова аппаратные средства,  можно с
       помощью  окна  Breakpoints  (Точки  останова)  и  команды   View¦
       Breakpoints (Обзор¦Точки останова). Все точки останова, для кото-
       рых используются вспомогательные аппаратные средства, будут отме-
       чены  звездочками  (*).  Такие точки останова выполняются гораздо

чем другие глобальные точки останова,


       быстрее, чем другие глобальные точки останова, для которых не ис-
       пользуются вспомогательные аппаратные средства.
                              Выражения условия
       -----------------------------------------------------------------
            Имеется много случаев, когда нежелательно, чтобы точка оста-
       нова срабатывала  при каждом выполнении определенной строки (опе-
       ратора) исходного кода,  особенно,  когда эта строка  выполняется
       много раз до того,  как встретится интересующий вас случай. Турбо
       отладчик предоставляет вам два способа уточнения  ситуации, когда
       должна срабатывать точка останова: счетчики прохода и условия.
           Область действия выражений, заданных для точек останова
       -----------------------------------------------------------------
            И действием,  которое будет выполняться при достижении точки
       останова,  и условием,  при котором она срабатывает, можно управ-
       лять с помощью задаваемого вами выражения. Это выражение вычисля-
       ется  с  использованием области действия адреса,  где установлена
       точка останова,  а не той области действия,  где в данный  момент
       остановилась программа.  Это означает,  что в вашем выражении для
       точки останова могут использоваться только имена переменных,  ко-
       торые являются допустимыми в том месте программы, где задана точ-
       ка останова (если эта область действия не  переопределена).  Пол-
       ностью область действия обсуждается в Главе 9.
            Если вы хотите установить точку останова для выражения в мо-
       дуле, который в данный момент не загружен отладчиком, и Турбо от-
       ладчик не может найти данное выражение,  то вы можете переопреде-
       лить область действия и задать файл,  который содержит выражение,
       или использоваться  для  смены  модулей  команду View¦Module (Об-
       зор¦Модуль).
            Если вы используете переменные,  являющиеся по  отношению  к

ные или локальные по отношению


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

       TDeb 3.0 #1-3               = 191 =
                          Аппаратные точки останова
       -----------------------------------------------------------------
            Аппаратная точка останова использует поддерживающие средства
       аппаратной отладки  (плату  аппаратной отладки или отладочные ре-
       гистры процессора 80386 или старше).  Если в вашей системе  уста-
       новлены средства  аппаратной отладки (команда File¦Get Info пока-
       зывает установку Breakpoints в Hardware),  то с помощью одного из
       следующих методов вы можете задать аппаратную точку останова:
            - Выберите команду Breakpoints¦Changed Memory Global,  кото-
              рая чаще всего используется для аппаратных точек останова.
            - Выберите команду Breakpoints¦Hardware.
            - Выведите меню Breakpoint Options  (выберите  команду  окна
              Vies¦Breakpoints Breakpoints¦At  или  Set Options),  затем
              сделайте следующее:
                 - проверьте переключатель Global;
                 - активизируйте "кнопку" Change (Изменение)ж
                 - в диалоговом окне Conditions and Actions выберите се-
                   лективный переключатель Hardware (Аппаратная) и акти-
                   визируйте "кнопку" Hardware диалогового окна;
                 - для  вывода  диалогового  окна  Hardware   Breakpoint
                   Options (Параметры аппаратной точки останова) активи-
                   зируйте "кнопку" Hardware;
                 - выберите в диалоговом окне нужный параметр (параметры
                   описываются в текстовом файле HDWDEBUG.TD).
                       Регистрация значений переменных
       -----------------------------------------------------------------

Иногда может  оказаться полезным регистрировать


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

       TDeb 3.0 #1-3               = 192 =
            Выберите селективный  переключатель Log (Регистрация) диало-
       гового окна Breakpoint Options (Параметры точки останова).  В от-
       вет  на выводимую подсказку введите выражение,  значение которого
       должно регистрироваться при каждом срабатывании  точки  останова.
       Если  вы  хотите  регистрировать  значение нескольких переменных,
       нужно установить несколько точек останова.
                 Примечание: При регистрации выражений  нужно  учитывать
            побочные эффекты.

       TDeb 3.0 #1-3               = 193 =
                          Точки останова и шаблоны
       -----------------------------------------------------------------
            Турбо отладчик поддерживает шаблоны C++.  Точки останова ус-
       танавливаются по-разному, в зависимости от использования F2 в ок-
       не Module,  в окне CPU или задании их с помощью диалогового  окна
       Breakpoint Options.
                      Точки останова и классы шаблонов
       -----------------------------------------------------------------
            Для задания точек останова в шаблонах имеется несколько  ме-
       тодов:
            - Если  вы установили точку останова в самом шаблоне,  нажав
              клавишу F2  при нахождении курсора в строке исходного кода
              шаблона в окне Module,  точки останова устанавливаются  во
              всех экземплярах классов этого шаблона.  Это средство поз-
              воляет вам отлаживать все поведение шаблона.

Если вы установили точку останова


            - Если вы установили точку останова в шаблоне, нажав клавиши
              Alt-F2 для вывода диалогового окна Breakpoint Options (Па-
              раметры точки останова),  то ввод в окне Module адреса вы-
              ражения  шаблона выводит диалоговое окно,  позволяющее вам
              выбрать экземпляр класса,  для которого вы хотите  устано-
              вить точку останова.
            Вы можете  удалить точку останова шаблона точно так же,  как
       удаляете любую другую точку останова - позиционировавшись  в окне
       Module подсвеченную  строку  на шаблон и нажав клавишу F2 или ис-
       пользуя команду удаления окна Breakpoint. При этом удаляются так-
       же точки останова соответствующего экземпляра класса.
            Если вы  позиционируетесь  на  точке  останова  в экземпляре
       класса в окне CPU и нажмете клавишу F2, то удаляется только точка
       останова для данного экземпляра класса.

       TDeb 3.0 #1-3               = 194 =
                      Точки останова в шаблонах функций
       -----------------------------------------------------------------
            Вы можете устанавливать и отменять точки останова для шабло-
       нов функций  точно также,  как это делается для шаблонов классов.
       При этом используются два метода - нажатие клавиши F2 или исполь-
       зование диалогового  окна  Breakpoint Options.  Они имеют для эк-
       земпляров функций тот же эффект, что и для экземпляров классов.
          Точки останова в шаблонах экземпляров классов и объектов
       -----------------------------------------------------------------
            Аналогично обычным классам и объектам,  вы можете установить
       точки останова в шаблонах экземпляров классов и объектов.
                                  Окно Log
       -----------------------------------------------------------------
            Окно Log  (Регистрация)  можно   создать,   выбрав   команду
       View¦Log (Обзор¦Регистрация).  Это окно позволяет вам просмотреть

которые имели место во время


       список значащих событий,  которые имели место во время сеанса от-
       ладки.
                г[*]=Log==========================3==[ ][ ]==¬
                ¦At MCINPUT.124                              ^
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦Breakpoint at TPDEMO.220                    -
                ¦We are now entering procedure Params...     -
                ¦Breakpoint-at-TPDEMO.180--------------------v
                L<----------------------------------------->--
            Рис. 7.6 Окно Log
            В окне  Log  (Регистрация)  выводится  пролистываемый список
       строк (вывод в окно).  Если зарегистрировано более 50  строк,  то
       самые  старые  строки списка теряются.  Для настройки числа строк
       используйте параметр командной строки при запуске Турбо отладчика
       или  измените  это число с помощью программы установки TDINST.  С
       помощью команды локального меню Open Log File (Открыть  файл  ре-
       гистрации)  можно сохранить всю регистрацию,  записывая ее непре-
       рывно в файл на диске.
            Перечислим, какие причины могут вызвать запись строк в  про-
       токол регистрации:
            - Ваша программа остановилась по заданному адресу.  Адрес ее
              останова регистрируется.

       TDeb 3.0 #1-3               = 195 =
            - Вы дали команду локального меню Add Comment (Добавить ком-
              ментарий).  Выводится  подсказка,  по которой нужно ввести
              комментарий, регистрируемый в протоколе.
            - Срабатывает точка останова,  которая регистрирует значение
              выражения.

для записи текущего содержимого области


Это значение помещается в протокол регистрации.
            - Вы  использовали команду Window¦Dump Pane To Log (Окно¦Вы-
              вод области в протокол регистрации)  (из  основного  меню)
              для записи текущего содержимого области окна.
            - Вы  отлаживаете прикладную программу для Microsoft Windows
              и использовали команду View¦Windows Messages  (Обзор¦Сооб-
              щения Windows) для вывода окна Windows Messages,  и теперь
              находитесь в локальном меню области Messages  этого  окна.
              Вы переключаете  параметр  Send  to Log Window (Передача в
              окно регистрации) в значение Yes (Да),  чтобы все приходя-
              щие в данное окно сообщения также отображались в Log.
            - Вы  отлаживаете прикладную программу для Microsoft Windows
              и используете команду Display Window Info (Вывод  информа-
              ции  Windows) локального меню окна Log для записи в журнал
              информации о глобальной динамически распределяемой области
              памяти,  информации о локальной динамически распределяемой
              области или списка модулей.

       TDeb 3.0 #1-3               = 196 =
                           Локальное меню окна Log
       -----------------------------------------------------------------
            Команды данного  меню позволяют вам управлять записью прото-
       кола регистрации в файл на диске,  останавливая и начиная регист-
       рацию, добавляя в протокол регистрации комментарий, и очищая про-
       токол.
            Локальное меню окна Log (Регистрация) выводится  при нажатии
       клавиш Alt-F10. Если разрешено использовать сокращения с клавишей
       Ctrl, то для непосредственного доступа к команде этого меню можно
       нажать клавишу Ctrl совместно с первой буквой нужной команды.
                                      -------------------------¬
            Открыть файл регистрации  ¦ Open log file...       ¦

По команде  Open  Log  File 


            Закрыть файл регистрации  ¦ Close log file         ¦
            Регистрация               ¦ Logging        YES     ¦
            Добавить комментарий      ¦ Add comment...         ¦
            Стереть файл регистрации  ¦ Erase log              ¦
            Вывести информацию        ¦ Display Windows Info...¦
             Windows                  L-------------------------
                          Команда Open Log File...
       -----------------------------------------------------------------
            По команде  Open  Log  File  (Открыть  файл регистрации) все
       строки, записываемые в протокол регистрации, записываются также в
       файл на диске.  Вам выводится подсказка с запросом имени файла, в
       который нужно записывать протокол регистрации.
            Когда вы  открываете  файл регистрации,  в него записываются
       все строки, которые уже выведены на экран в окне регистрации. Это
       позволяет  вам  открыть файл на диске после того,  как вы увидите
       что-то вас интересующее и захотите записать это на диск.
            Если вы хотите начать регистрацию на диске, не включая в нее
       строки,  которые уже выведены на экран,  то перед выбором команды
       Open File Log (Открыть файл регистрации) выберите сначала команду
       Erase Log File (Стереть файл регистрации).

       TDeb 3.0 #1-3               = 197 =
                           Команда Close Log File
       -----------------------------------------------------------------
            Команда Close Log File (Закрыть файл регистрации) останавли-
       вает запись строк в файл регистрации,  заданный в команде локаль-
       ного меню Open Log File (Открыть файл регистрации).  Данный  файл
       закрывается.
                               Команда Logging
       -----------------------------------------------------------------
            Команда Logging (Регистрация) разрешает  или  запрещает  ре-
       гистрацию, управляя выводом в окно Log (Регистрация).

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


                             Команда Add Comment
       -----------------------------------------------------------------
            Команда Add Comment  (Добавить  комментарий)  позволяет  вам
       включить  в  регистрируемую  информацию  комментарий.  В ответ на
       подсказку можно ввести строку  текста,  которая  может  содержать
       столько символов, сколько вам требуется.
                              Команда Erase Log
       -----------------------------------------------------------------
            Команда Erase Log (Стереть регистрацию) очищает  список  ре-
       гистрации.  Окно Log (Регистрация) заполняется пробелами.  Это не
       влияет на запись регистрации в файл на диске.
                        Команда Display Windows Info
       -----------------------------------------------------------------
            Данная команда  выводит  диалоговое окно Windows Information
       (Информация Windows),  позволяющий получить информацию о глобаль-
       ной  и  локальной  динамически  распределяемой области памяти или
       списке модулей,  входящих в вашу прикладную программу. Это средс-
       тво описано подробнее в Главе 17.

       TDeb 3.0 #1-3               = 198 =
                   Глава 8. Просмотр и модификация файлов
       -----------------------------------------------------------------
            При отладке  программы  Турбо отладчик обрабатывает файлы на
       диске  как естественное расширение программы. Вы можете проверить
       и  модифицировать  любой  файл на диске,  просматривая его в коде
       ASCII или в шестнадцатиричном виде. Из среды Турбо отладчика мож-
       но также изменить текcтовые файлы с  помощью  используемого  вами
       текстового процессора или редактора.
            В данной главе рассказывается, как можно анализировать и мо-
       дифицировать два вида файлов на диске: файлы, в которых содержит-
       ся исходный код программы,  и другие файлы.
                     Просмотр исходных файлов программы

Исходными файлами  программы  являются  те


       -----------------------------------------------------------------
            Исходными файлами  программы  являются  те файлы,  с помощью
       компиляции которых создаются  выполняемые  модули  (файлы  .EXE).
       Обычно  их просматривают,  когда хотят проанализировать поведение
       программы или написать фрагмент кода. При отладке часто приходит-
       ся просматривать исходный код функции, чтобы определить, допусти-
       мы ли ее аргументы и корректно ли возвращаемое ей значение.
                 Примечание: Загрузка и отладка модулей Windows DLL опи-
            сывается в Главе 17.
            При прохождении программы с использованием  Турбо  отладчика
       он автоматически выводит на экран ту часть исходного кода,  кото-
       рая соответствует текущему адресу программы.
            Файлы, включенные в исходный файл с использованием директивы
       компилятора, которая генерирует номера строк (аналогично директи-
       ве #include в языке Си и INCLUDE в Ассемблера) также рассматрива-
       ются, как исходные файлы программы. Для просмотра исходных файлов
       программы всегда нужно использовать  окно  View¦Module  (Окно¦Мо-
       дуль),  поскольку это указывает Турбо отладчику,  что файл предс-
       тавляет собой исходный модуль.  Для выбора одного из файлов нужно
       использовать команду локального меню File (Файл).

       TDeb 3.0 #1-3               = 199 =
                                 Окно Module
       -----------------------------------------------------------------
            Окно Module (Модуль) можно создать,  выбрав в  главном  меню
       команду View¦Module (Обзор¦Модуль) (или нажав клавишу F3).
         г=[*]=Module: TPDEMO File: TPDEMO.PAS 217 ====================¬
         ¦      end;                                                   ^
         ¦   Writeln;                                                  -
         ¦  end; { ParmsOnHeap }                                       -
         ¦                                                             -

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


         ¦> begin                                                      -
         ¦    Init;                                                    -
         ¦    Buffer := GetLine;                                       -
         ¦    while Buffer <> '' do                                    -
         ¦    begin                                                    -
         ¦      ProcessLine(Buffer);                                   -
         ¦      Buffer := GetLine;                                     -
         ¦    end;                                                     -
         ¦    ShowResult;                                              -
         ¦    ParmsOnHeap;                                             -
         ¦  end.                                                       -
         ¦                                                             -
         ¦                                                             -
         ¦                                                             -
         ¦                                                             v
         L<----------------------------------------------------------->-
            Рис. 8.1 Окно Module
            В диалоговом окне вы можете ввести имя модуля, который хоти-
       те просмотреть.
            Если вы отлаживаете прикладную программу Windows,  в  данном
       диалоговом окне выводится список, в котором показаны модули прог-
       раммы, и список, в котором показаны файлы DLL и .EXE, загруженные
       в данный момент Windows.
                 Примечание: При запуске отладчика TDW вам требуется как
            файл .EXE, так и исходные текстовые файлы, а также выполняе-
            мый  и  исходный код всех написанных для программы библиотек
            DLL.
            При этом Турбо отладчик загрузит  исходный  файл  выбранного
       модуля. Поиск исходного файла он выполняет в следующем порядке:
            1. В каталоге, в котором находится выполняемый файл компиля-

В каталоге, где содержатся отлаживаемые


               тора.
            2. В каталогах,  заданных командой  Options¦Path  (Параметры
               ¦Маршрут) для команды Source (Исходный модуль), или в па-
               раметре командной строки -sd.

       TDeb 3.0 #1-3               = 200 =
            3. В текущем каталоге.
            4. В каталоге, где содержатся отлаживаемые программы.
            В окне Module (Модуль) выводится содержимое  исходного файла
       выбранного модуля. В заголовке окна Module показывается имя прос-
       матриваемого модуля,  имя исходного файла и номер строки, в кото-
       рой находится  курсор.  Текущий  адрес  программы (CS:IP) отмечен
       символом стрелки (>) в первой позиции окна.
            Если после имени файла в заголовке выводится  сообщение opt,
       то программа  оптимизирована  компилятором.  При поиске некоторых
       исключенных при оптимизации переменных вы  можете  столкнуться  с
       трудностями. Кроме того,  переменные, которые стали регистровыми,
       не будут иметь адреса.
            Если после имени файла в заголовке появляется слово modified
       (модифицирован), то со времени последней компиляции или компонов-
       ки для создания отлаживаемой программы файл был изменен.  Это оз-
       начает,  что  номера  строк программ в обновленном исходном файле
       могут не соответствовать номерам  строк  отлаживаемой  программы.
       Это может привести к тому,  что стрелка, показывающая текущий ад-
       рес в программе (CS:IP), будет указывать на неверную строку.
                         Локальное меню окна Module
       -----------------------------------------------------------------
            В локальном меню окна Module (Модуль) предусмотрено несколь-
       ко команд,  позволяющих вам перемещаться в указанном модуле, ссы-
       латься на элементы данных и проверять их, а также выводить в окно
       новый файл или модуль.
            Вероятно, при работе с  отладчиком  вы  будете  пользоваться

Для вывода локального меню данного


       этим  меню чаще,  чем другими меню,  поэтому лучше ближе познако-
       миться с различными его возможностями.
            Для вывода локального меню данного окна  можно  использовать
       комбинацию клавиш Alt-F10. Если разрешено использовать сокращения
       с клавишей Ctrl, то для непосредственного доступа к команде этого
       меню можно  нажать клавишу Ctrl вместе с первой буквой нужной ко-
       манды (например, при нажатии Ctrl-S вызовется команда Search).
                                               -------------¬
                   Проверка                    ¦ Inspect    ¦
                   Просмотр                    ¦ Watch      ¦
                                               +------------+
                   Модуль                      ¦ Module...  ¦
                   Файл                        ¦ File...    ¦
                                               +------------+
                   Предыдущий                  ¦ Previous   ¦
                   Строка                      ¦ Line...    ¦
                   Поиск                       ¦ Search...  ¦

       TDeb 3.0 #1-3               = 201 =
                   Следующий                   ¦ Next...    ¦
                   Начало                      ¦ Origin     ¦
                   Переход                     ¦ Goto...    ¦
                   Редактирование              ¦ Edit       ¦
                                               L-------------
                               Команда Inspect
       -----------------------------------------------------------------
            Команда Inspect (Проверка) открывает окно проверки,в котором
       выводится содержимое переменной программы,  расположенной в теку-
       щей позиции курсора. Перед тем как дать эту команду вы можете по-
       местить курсор в исходном файле на одну из  переменных программы,
       или ввести ее имя в поле ввода выводимого диалогового окна.
            Поскольку эта  команда  избавляет вас от ввода каждого имени

с ее помощью можно  проверить 


       проверяемой переменной,  с ее помощью можно  проверить  множество
       переменных программы.
                                Команда Watch
       -----------------------------------------------------------------
            Команда Watch (Просмотр) добавляет в окно просмотра перемен-
       ную,  расположенную в текущей позиции курсора. Ее полезно исполь-
       зовать, если вы хотите при выполнении программы непрерывно отсле-
       живать  значение переменной.  Перед тем,  как давать эту команду,
       нужно поместить в исходном файле курсор  на  одну  из  переменных
       программы.
                 Примечание: Если курсор не находится на переменной, вам
             выведется подсказка для ее ввода.
                              Команда Module...
       -----------------------------------------------------------------
            Команда Module (Модуль) позволяет вам просмотреть другой мо-
       дуль  (который  можно выбрать из выводимого списка модулей).  Эту
       команду полезно использовать,  когда вас больше не интересует те-
       кущий модуль, но вы не хотите открывать еще одно окно Module.
                               Команда File...
       -----------------------------------------------------------------
            Команда File  (Файл) позволяет вам переключиться на просмотр
       того или иного исходного файла,  входящего в состав просматривае-
       мого  модуля.  Выберите файл,  который вы хотите просмотреть,  из
       списка файлов.  Большинству модулей соответствует  один  исходный
       файл,  в котором находится весь исходный код. В других включаемых
       в данный файл файлах содержатся обычно только определенные  конс-
       танты и структуры данных. Используйте данную команду, если исход-
       ный код вашего модуля содержится в нескольких файлах.

       TDeb 3.0 #1-3               = 202 =
            Если вы  хотите просматривать одновременно несколько файлов,
       то для  создания другого окна File (Файл) используйте команду ос-

который вы просматривали. Эту команду


       новного меню View¦Another¦File (Обзор¦Другой¦Файл), или для того,
       чтобы просмотреть первый файл - команду View¦File (Обзор¦Файл).
                              Команда Previous
       -----------------------------------------------------------------
            Команда Previous (Предыдущий) возвращает вас в последний ис-
       ходный модуль,  который вы просматривали. Эту команду можно также
       использовать для возврата к предыдущему месту после того,  как вы
       дали команду, которая изменила позицию в текущем модуле.
                               Команда Line...
       -----------------------------------------------------------------
            Команда Line (Строка) позиционирует вас в файле на  строку с
       другим номером.  Введите номер новой строки, на которую вы хотите
       перейти.  Если вы введете номер строки, превышающий число строк в
       файле, во эта команда переместит вас на последнюю строку файла.
                              Команда Search...
       -----------------------------------------------------------------
            Команда Search (Поиск) выполняет  поиск  символьной  строки,
       начиная  от текущей позиции курсора.  Если курсор позиционируется
       на что-либо, напоминающее имя переменной, выводится подсказка по-
       иска,  инициализированная данным именем.  Кроме того,  если с по-
       мощью клавиши Ins вы отметили в файле блок,  то этот  блок  будет
       использован для инициализации подсказки поиска. Это позволяет вам
       избежать ввода строки, которая уже видна в файле.
            При поиске допускается задавать простые трафаретные символы:
       ?,  задающий один символ, и *, показывающую 0 или более символов.
       При достижении конца файла поиск не будет продолжен с его начала.
       Чтобы выполнить поиск по всему файлу, перейдите на начало файла с
       помощью клавиш Ctrl-PgUp.
                                Команда Next
       -----------------------------------------------------------------

Эту команду можно использовать только


            Команда Next (Следующий) выполняет поиск следующего  вхожде-
       ния  символьной  строки,  которую вы задали в команде Search (По-
       иск). Эту команду можно использовать только после команды Search.
            Иногда команда поиска,  найдя соответствие,  останавливается
       не  на  нужной строке,  а нужная строке находится дальше в файле.
       Команда Next позволяет вам возобновить поиск без повторного ввода

       TDeb 3.0 #1-3               = 203 =
       искомой строки.
                               Команда Origin
       -----------------------------------------------------------------
            Команда Origin (Начало) позиционирует вас на  тот  модуль  и
       номер  строки,  которые  соответствуют  текущему адресу программы
       (определяемому содержимым регистров CS:IP).  Если просматриваемый
       в данный момент модуль не является  модулем,  содержащим  текущий
       адрес программы, окно Module (Модуль) переключится, и будет выве-
       ден нужный модуль.  Данную команду полезно использовать после то-
       го,  как  вы  просмотрели  исходный код и хотите вернуться к тому
       месту, где в данный момент остановилась программа.

       TDeb 3.0 #1-3               = 204 =
                               Команда Goto...
       -----------------------------------------------------------------
            Команда Goto  (Перейти на...) позиционирует вас на любой ад-
       рес в программе. От вас требуется ввести соответствующий "адрес".
       При этом допускается вводить номер строки,  имя функции или шест-
       надцатиричный адрес.  Полное описание способов задания адреса со-
       держится в Главе 9.
            Эту команду можно вызвать, если просто начать вводить метку,
       на которую вы хотите перейти. Это приведет к выводу окна подсказ-
       ки (как  если бы вы использовали команду Run¦Execute to (Выполне-
       ние¦Выполнение до курсора)).  Для часто используемой команды  это

ного кода, то открывается окно


       является удобным сокращением.
                 Примечание: Если  адресу не соответствует строка исход-
            ного кода, то открывается окно CPU.
                                Команда Edit
       -----------------------------------------------------------------
            Команда Edit (Редактирование) позволяет выбрать  редактор, с
       помощью которого вы можете внести изменения в исходный файл прос-
       матриваемого модуля.  Задать команду,  запускающую ваш  редактор,
       можно с помощью программы установки  параметров  Турбо  отладчика
       TDINST.
                       Просмотр других файлов на диске
       -----------------------------------------------------------------
            С помощью окна File (Файл) вы можете проверить и модифициро-
       вать любой файл в вашей системе.  Просматривать файл можно в коде
       ASCII (текстовый вид) или в шестнадцатиричном виде,  либо в  виде
       шестнадцатиричных байт  данных  (для  этого  используются команда
       Display As, описанная далее в данной главе).

       TDeb 3.0 #1-3               = 205 =
                                  Окно File
       -----------------------------------------------------------------
            Окно File  (Файл)  можно  создать,  выбрав команду View¦File
       (Обзор¦Файл) из основного меню.  Для получения списка файлов  для
       выбора допускается использовать трафаретные символы DOS.
           г[*]=File: C:\tc\doc.h 197========================[ ][ ]¬
           ¦ char _Cdecl peekb (unsigned segment, unsigned offset);^
           ¦ void _Cdecl poke  (unsigned segment, unsigned offset, -
           ¦ void _Cdecl pokeb (unsigned segment, unsigned offset, -
           ¦ int  _Cdecl randbrd (struct fcb *fcb, int rcnt);      -
           ¦ int  _Cdecl segread (struct fcb *fcb, int rcnt);      -
           ¦ void _Cdecl setblock(unsigned segx, unsigned newsize);-
           ¦ int  _Cdecl setcbrk (int cbrkvalue);                  -

а также номер строки, на


           ¦ int  _Cdecl setdate (struct date *datep);             -
           ¦ void _Cdecl setswrichar  (char ch);                   -
           ¦ void _Cdecl settime (struct time *timep);             -
           ¦ void _Cdecl setvect (int interruptno, void interrupt (-
           ¦ void _Cdecl setverify   (int value);                  -
           ¦ void _Cdecl sleep (unsigned seconds);                 -
           ¦ void _Cdecl sound (unsigned frequency);               v
           L<----------------------------------------------------->-
            Рис. 8.2 Окно File
            В окне File (Файл) выводится содержимое выбранного вами фай-
       ла. Имя просматриваемого файла,  а также номер строки, на которой
       в файле находится курсор, выводится в заголовке окна (как текст в
       коде ASCII).
            При первом создании окна File файл может выводиться  либо  в
       виде текста в коде ASCII,  либо в шестнадцатиричном виде, в зави-
       симости от того, рассматривает ли Турбо отладчик данный файл, как
       текстовый файл (ASCII) или как двоичные данные. С помощью команды
       локального меню  Display  As (Вывести,  как...) можно переключить
       режим вывода на экран (эта команда описана далее).

       TDeb 3.0 #1-3               = 206 =
           г[*]=File: C:\tc\doc.h 197========================[ ][ ]¬
           ¦0000: 2f 2a 09 64 6f 73 2e 68 ¦* dis.h                 ^
           ¦0008: 0d 0a 0d 0a 09 44 65 66      Def                 -
           ¦0010: 69 6e 65 73 20 73 74 72 ines str                 -
           ¦0018: 75 63 74 73 2c 20 75 6e ucts, un                 -
           ¦0020: 69 6f 6e 73 2c 20 6d 61 lons, ma                 -
           ¦0028: 63 72 6f 73 2c 20 61 6e cros, an                 -
           ¦0020: 63 20 66 75 6e 63 74 69 d functi                 -
           ¦0038: 6f 6e 73 20 74 6e 67 0d ons for                  -
           ¦0040: 64 65 61 6c 20 68 6e 4d dealing                  -

File б ўлў®¤®¬


           ¦0048: 0a 09 77 69 20 61 20 4d   with M                 -
           ¦0050: 53 44 4f 53 41 49 6e 64 SDOS and                 -
           ¦0058: 20 74 68 65 63 50 6e 74  the Int                 -
           ¦0060: 65 6c 20 69 50 72 58 38 el iAPx8                 -
           ¦0068: 36 20 6d 69 41 72 6f 70 6 microp                 -
           ¦0070: 72 6f 63 65 63 73 6f 72 rocessor                 v
           L<----------------------------------------------------->-
            Рис. 8.3 Окно File с выводом шестнадцатиричных данных
                          Локальное меню окна File
       -----------------------------------------------------------------
            Локальное меню окна File (Файл) содержит команды для переме-
       щения по файлу на диске,  изменения характера вывода  содержимого
       файла на экран и внесения в файл изменений.
            Для вывода  локального меню окна File используйте комбинацию
       клавиш Alt-F10. Если разрешено использовать сокращения с клавишей
       Ctrl, то для непосредственного доступа к команде этого меню можно
       нажать клавишу Ctrl совместно с первой буквой нужной команды.
                 --------------------¬
                 ¦ Goto...           ¦   Переход
                 ¦ Search...         ¦   Поиск
                 ¦ Next              ¦   Следующий
                 +-------------------+
                 ¦ Display as  Ascii ¦   Вывести в виде...
                 ¦ File...           ¦   Файл
                 ¦ Edit              ¦   Редактирование
                 L--------------------
                                Команда Goto
       -----------------------------------------------------------------
            Эта команда позиционирует вас на строку с другим номером или
       смещением.  Если  вы просматриваете файл в текстовом виде (в коде
       ASCII),  введите номер строки, на которую вы хотите перейти. Если
       вы просматриваете текст в виде  шестнадцатиричных  байт,  введите

При вводе смещения вы можете


       смещение  относительно начала файла,  с которого вы хотите начать

       TDeb 3.0 #1-3               = 207 =
       вывод на экран.  При вводе смещения вы можете использовать полный
       анализатор выражений. Если вы зададите строку, номер которой пре-
       вышает число строк в файле, во эта команда переместит вас на пос-
       леднюю строку файла (в конец файла).
                               Команда Search
       -----------------------------------------------------------------
            Команда Search (Поиск) выполняет  поиск  символьной  строки,
       начиная от текущей позиции курсора (для ввода  символьной  строки
       вам выводится подсказка).  Если курсор позиционируется на что-ли-
       бо, напоминающее имя переменной, выводится подсказка поиска, ини-
       циализированная данным именем. Кроме того, если с помощью клавиши
       Ins вы отметили в файле блок,  то этот блок будет использован для
       инициализации подсказки поиска.  Это позволяет вам избежать ввода
       строки, которая уже видна в файле.
            Если файл выводится в коде ASCII, при поиске допускается за-
       давать простые трафаретные символы: ?, задающий один символ, и *,
       показывающую 0 или более символов.
           Если файл выводится в шестнадцатиричном виде,  то нужно зада-
       вать список байт,  состоящий из байтовых значений или заключенных
       в кавычки строк символов (используется тот  же  синтаксис  языка,
       что и при вводе выражений).
            Например, в языке Си список байт,  состоящий из шестнадцати-
       ричного числа 0408, вводится следующим образом:
            Ox0884
            Если текущим языком является Паскаль,  то тот же список байт
       вводится так:
            $0804
                 Примечание: Полная  информация о списках байт приведена
            в Главе 9.
            При достижении конца файла поиск не будет  продолжен  с  его
       начала. Чтобы выполнить поиск по всему файлу, перейдите на начало

Вы можете вызвать эту команду,


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

       TDeb 3.0 #1-3               = 208 =
       (Поиск).
            Иногда команда поиска,  найдя соответствие,  останавливается
       не  на  нужной строке,  а нужная строке находится дальше в файле.
       Команда Next позволяет вам возобновить поиск без повторного ввода
       искомой строки.
                             Команда Display As
       -----------------------------------------------------------------
            Команда Display As (Вывести как...)  позволяет переключаться
       между выводом файла в виде текста ASCII и в шестнадцатиричном ви-
       де.  При выборе вывода на экран в коде ASCII файл выводится в та-
       ком виде, как вы видите его при работе с редактором или текстовым
       процессором.  Если вы выберете  шестнадцатиричный  вывод,  каждая
       строка будет начинаться с шестнадцатиричного смещения в файле. На
       строке может выводиться 8 или 16 байт данных,  в  зависимости  от
       ширины области окна. Справа от шестнадцатиричного вывода байт вы-
       водятся соответствующие каждому байту символы.Поскольку может вы-
       водиться полный набор символов,  байтовые значения < 32 или > 127
       выводятся на экран в виде соответствующих символов.
                               Команда File...
       -----------------------------------------------------------------
            Команда File (Файл) позволяет вам переключиться  на просмотр

другого файла. Для получения списка


       другого файла. Для получения списка файлов для выбора допускается
       использовать трафаретные символы DOS, либо можно ввести имя конк-
       ретного файла,  который и будет загружен. Если вы хотите просмат-
       ривать на экране два различных файла одновременно,  то для созда-
       ния    другого    окна    File    (Файл)    используйте   команду
       View¦Ahother¦File (Обзор¦Другой¦Файл).
                                Команда Edit
       -----------------------------------------------------------------
            Если вы просматриваете файл в  виде  текста  ASCII,  команда
       Edit  (Редактирование)  позволяет  вам  вносить в файл изменения,
       вызвав редактор, выбранный с помощью программы установки парамет-
       ров отладчика TDINST.
            Если вы просматриваете файл в виде  шестнадцатиричных  байт,
       то  отладчик  не  запускает редактор.  Вместо этого вам выводится
       подсказка для замены байт в текущей позиции. Введите список байт,
       как это делается в команде поиска.
                Примечание: Полное  описание  списков  байт содержится в
            Главе 9.
       TDeb 3.0 #3-3                 = 1 =
     Глава 17. Турбо отладчик для Windows (TDW)........................8
       Требования для запуска TDW......................................8
       Установка TDW...................................................9
       Настройка конфигурации TDW.....................................10
       Использование параметров командной строки TDW..................10
       Использование TDINST для TDW...................................12
       Использование TDW..............................................12
       Различия между TDW и Турбо отладчиком..........................12
       Новые средства TDW.............................................14
       Регистрация сообщений Windows..................................14
       Выбор окна.....................................................16

Выбор окна для прикладной программы,


       Добавление выбранного окна.....................................16
       Выбор окна для прикладной программы, использующей
        ObjectWindows.................................................17
       Получение описателя окна.......................................18
       Задание окна с разрешенной поддержкой ObnjectWindows...........19
       Добавление выбора окна с разрешенной поддержкой
        ObjectWindows.................................................19
       Отмена выбора окна.............................................21
       Задание класса сообщений и действия............................22
       Добавление класса сообщений....................................22
       Удаление класса сообщений......................................25
       Просмотр сообщений.............................................26
       Замечания по сообщениям окна...................................26
       Получение содержимого памяти и списка модулей..................28
       Получение списка содержимого...................................29
       Листинг содержимого локальной динамически распределяемой
        области.......................................................30
       Формат вывода локальной динамически распределяемой области.....32
       Получение списка модулей.......................................32
       Формат вывода списка модулей Windows (Таблица 17.7)............33
       Отладка динамически компонуемых библиотек (DLL)................33
       Использование диалогового окна Load Modules or DLLs............35
       Переход к другому исходному модулю.............................36
       Работа с DLL и программами.....................................36
       Добавление DLL в список DLLs & Programs........................37
       Установка параметров отладки для DLL...........................39
       Управление загрузкой TDW таблиц имен идентификаторов DLL.......39
       Отладка начального кода загрузки DLL...........................39

Отладка прикладной программы


       Преобразование описателей памяти в адреса......................42
       Рекомендации по отладке........................................42
       Сообщения об ошибках TDW.......................................44
     Глава 18. Отладка прикладной программы для Windows...............45
       Примеры программ...............................................45
       Компиляция и компоновка демонстрационных программ..............47
       Отладка программы BCWDEMOA.....................................47
       Принятие решения о дальнейших действиях........................47
       Завершение BCWDEMOA............................................48
       Регистрация сообщений..........................................50
       Анализ протокола сообщений.....................................50
       Поиск ошибки...................................................51
       Пошаговое выполнение программы.................................52
       Анализ DoPaint.................................................55

       TDeb 3.0 #3-3                 = 2 =
       Нахождение ошибки..............................................55
       Завершение BCWDEMOA............................................55
       Отладка BCWDEMOB...............................................56
       Переключение из программы......................................57
       Тестирование программы.........................................57
       Принятие решения...............................................57
       Сравнение списков объектов глобальной памяти...................58
       Нахождение ошибки: функциональный подход.......................59
       Выбор элементов меню...........................................59
       Рисование фигуры...............................................60
       Рисование фигуры (и нахождение позиции ошибки).................60
       Перерисовка экрана.............................................62
       Заключение.....................................................62

Отладка программы, использующей


     Глава 19. Отладка программы, использующей ObjectWindows..........63
       О программе....................................................63
       Определение оконного типа ScribbleWindow.......................64
       Конструктор ScribbleWindow.....................................66
       GetWindowClass.................................................66
       WMRButtonDown..................................................66
       WMLButtonUp....................................................66
       WMRButtonDown..................................................66
       WMMouseMove....................................................66
       Подпрограммы цвета пера........................................67
       Создание прикладной программы..................................68
       Отладка программы..............................................68
       Выявление первой ошибки........................................68
       Поиск функции, которая вызывает Windows........................68
       Отладка функции WMLButtonDown..................................70
       Отладка MoveTo.................................................70
       Исправление ошибки.............................................70
       Проверка исправлений...........................................72
       Поиск ошибки назначения цвета пера.............................72
       Установка точки останова по сообщению окна.....................72
       Задание точки останова по сообщению окна по описателю..........74
       Установка точки прерывания по сообщению на объекте окна........76
       Проверка wParam................................................76
       Проверка исправления...........................................78
       Поиск ошибки рисования за пределом экрана......................78
       Регистрация сообщений Windows..................................79
       Обнаружение ошибки.............................................79
       Исправление ошибки.............................................79

Отладка резидентных программ


       Проверка исправлений...........................................82
       Поиск ошибки стирания экрана...................................82
       Анализ причины ошибки..........................................83
       Исправление ошибки.............................................83
       Проверка исправления...........................................83
     Глава 20. Отладка резидентных программ и драйверов
        устройств.....................................................84
       Что такое резидентная программа?...............................84
       Отладка резидентной в памяти программы.........................85
       Что такое драйвер устройства?..................................88
       Отладка драйвера устройства....................................90
       Завершение сеанса отладки......................................92

       TDeb 3.0 #3-3                 = 3 =
     Приложение A. Параметры командной строки.........................94
     Приложение B. Технические замечания..............................96
       Измененный адрес загрузки и свободная память...................96
       Сбой системы...................................................96
       Трассировка в DOS и переключение идентификатора процесса.......97
       Использование сопроцессора 8087/80287 и эмулятора..............97
       Прерывания, используемые Турбо отладчиком......................97
       Прерывание 1/Прерывание3.......................................97
       Прерывание 2...................................................97
       Прерывание 9...................................................98
       Отладка при использовании прерываний INT3 и INT1...............98
       Сохранение содержимого и переключение режима экрана............98
       Потребности в памяти...........................................99
       Поддержка EMS..................................................99
       Сохранение и восстановление вектора прерываний................100

Приложение C. Ключевые слова встроенного


     Приложение C. Ключевые слова встроенного Ассемблера.............101
       Мнемонические обозначения команд процессора 80386.............102
       Мнемонические обозначения команд процессора 80486 Таблица C.3.102
       Регистры процессора 80386         Таблица C.4.................102
       Регистры центрального процессора      Таблица C.5.............102
       Специальные зарезервированные слова    Таблица C.6............102
       Мнемонические обозначения команд сопроцессора 8087/80287......103
       Мнемонические обозначения команд сопроцессора 80387 ..........103
     Приложение D. Настройка Турбо отладчика.........................104
       Запуск программы TDINST.......................................104
       Параметры командной строки TDWINST............................105
       Параметр -C...................................................105
       Параметр -W...................................................106
       Параметр -P...................................................106
       Установка цветов экрана.......................................106
       Настройка цветов экрана.......................................106
       Окна..........................................................107
       Диалоговые окна...............................................109
       Меню..........................................................111
       Экран.........................................................111
       Цвета, используемые по умолчанию..............................112
       Установка параметров экрана Турбо отладчика...................112
       Переключатели Display Swapping................................113
       Переключатель Integer Format..................................113
       Параметр Beginning Display....................................114
       Переключатель Screen Lines....................................114
       Tab Size......................................................114
       Maximum Tiled Watch...........................................114

Поле ввода Log List


       Параметр Fast Screen Update...................................114
       Параметр Permit 43/50-Line Mode...............................115
       Параметр Full Graphics Save...................................115
       Переключатель User Screen Updating............................115
       Поле ввода Log List Length....................................117
       Поле ввода Floating Precision.................................117
       Поле ввода Range Inspect......................................117
       Установка параметров Турбо отладчика..........................117

       TDeb 3.0 #3-3                 = 4 =
       Параметр Directories..........................................117
       Параметр Input and Prompting..................................119
       Диалоговое окно Source Debugging..............................121
       Параметр Ignore Symbol Case...................................121
       Параметр OWL window messages..................................121
       Диалоговое окно Miscellaneous Options.........................123
       NMI intersept (Перехват немаскируемого прерывания)............124
       Use Expanded Memory (Использование расширенной памяти)........124
       Change Process ID (Смена идентификатора процесса).............124
       Full Trace History (Полный протокол трассировки)..............124
       Параметр International (Международный)........................125
       DOS Shell Swap Size...........................................126
       Spare Symbol Memory...........................................126
       Remote Type (Тип удаленной отладки)...........................126
       Remote Link Port (Порт удаленной связи).......................126
       Link Speed (Cкорость коммуникаций)............................126
       Network Local Name (Локальное имя в сети).....................126
       Network Remote Name (Удаленное имя в сети)....................126
       Задание режимов вывода........................................128

Удаленная отладка прикладных программ для


       Параметры командной строки и их эквиваленты в программе
        TDINST.......................................................129
       В процессе работы.............................................131
       Сохранение файла конфигурации.................................131
       Модификация файла TD.EXE......................................131
       Выход из программы TDINST.....................................131
     Приложение E. Удаленная отладка.................................133
       Требования к программному и аппаратному обеспечению...........134
       Отладка удаленных прикладных программ DOS.....................134
       Установка удаленной системы...................................135
       Настройка конфигурации TDREMOTE...............................136
       Настройка TDREMOTE............................................136
       Удаленный драйвер DOS.........................................137
       Запуск удаленного последовательного драйвера..................137
       Запуск удаленного драйвера LAN................................138
       Как установить удаленную связь в DOS..........................138
       Последовательное соединение...................................138
       Соединение через LAN..........................................139
       Удаленная отладка прикладных программ для Windows.............140
       Подготовка удаленной системы..................................140
       Конфигурация WREMOTE..........................................141
       Установка WREMOTE и WRSETUP в Windows.........................142
       Связь через последовательный порт.............................142
       Связь через LAN...............................................144
       Параметры командной строки программы WREMOTE..................145
       Запуск удаленного драйвера Windows............................145
       Установка связи с удаленной системой с Windows................145
       Связь через последовательный порт.............................146

Bad or mission configuration file


       Связь через LAN...............................................146
       Загрузка программы в удаленную систему........................147
       Сеансы удаленной отладки......................................147
       Возможные затруднения.........................................148
       Сообщения утилиты TDREMOTE....................................149
       Сообщения программы WREMOTE...................................152

       TDeb 3.0 #3-3                 = 5 =
     Приложение F. Подсказки и сообщения об ошибках..................153
       Подсказки.....................................................153
       Ошибки........................................................162
       Фатальные ошибки..............................................162
       Сообщения об ошибках..........................................164
       ')' expected..................................................164
       ':' expected..................................................164
       ']' expected..................................................164
       Already logging to a file.....................................165
       Ambiguous symbol name.........................................165
       Bad or mission configuration file name........................165
       Cannot access an inactive scope...............................165
       Cannot be changed.............................................165
       Can't do this when Turbo Debugger is resident.................165
       Can't do this when user program is resident...................165
       Can't execute DOS command processor...........................166
       Can't go resident until user program terminates...............166
       Can't set a breakpoint at this address........................166
       Can't set any more hardware breakpoints.......................166
       Can't set hardware condition on this breakpoint...............166
       Can't have more then one segment override.....................166

t set that sort of


       Can't set a breakpoint at this location.......................167
       Can' t set that sort of hardware breakpoint....................167
       Can't set hardware condition on this breakpoint...............167
       Can't swap user program to disk...............................167
       Constructors and destructors cannot be called.................167
       Count value too large.........................................167
       Ctlr-Alt-SysRq interrupt. System crash possible. Continue?....168
       Destination too far away......................................168
       Divide by zero................................................168
       DLL already in list...........................................168
       Edit program not specified....................................168
       Error loading program.........................................169
       Error opening file___.........................................169
       Error opening log file___.....................................169
       Error reading block into memory...............................169
       Error saving configuration....................................169
       Error swaping in user program, press key to load..............169
       Error writing block on disk...................................169
       Error writing log file........................................170
       Error writing to file.........................................170
       Expression too complex........................................170
       Expressions with side effects not permitted...................170
       Extra input after expression..................................170
       Help file ___ not found.......................................171
       Illegal procedure or function call............................171
       Immediate operand out of range................................171
       Initialization not complete...................................171
       Invalid argument list.........................................171

Invalid register combination in address


       Invalid character constant....................................172
       Invalid format string.........................................172
       Invalid function parameter(s).................................172
       Invalid instruction...........................................172

       TDeb 3.0 #3-3                 = 6 =
       Invalid instruction mnemonic..................................172
       Invalid number entered........................................173
       Invalid operand(s)............................................173
       Invalid operator/data combination.............................173
       Invalid pass count entered....................................173
       Invalid register..............................................173
       Invalid register combination in address expression............173
       Invalid register in address expression........................174
       Invalid symbol in operand.....................................174
       Invalid type cast.............................................174
       Invalid value entered.........................................174
       Keyword not a symbol..........................................175
       Left side not a record, structure or union....................175
       No coprocessor or emulator installed..........................175
       No hardware debugging avaliable...............................175
       No help for this context......................................175
       No modules with line number information.......................176
       No previous search expression.................................176
       No program loaded.............................................176
       No source file for module___..................................176
       No type information for this symbol...........................176
       Not a function name...........................................176
       Not a record, structure, or union member......................177

Not enough memory for selected


       Not enough memory for selected operation......................177
       Not enogh memory to load program..............................177
       Not enough memory to load symbol table........................177
       Only one operand size allowed.................................178
       Operand must be memory location...............................178
       Operand size unknown..........................................178
       Overlay not loaded............................................178
       Path not found................................................178
       Path or file not found........................................179
       Program has no object or classes..............................179
       Program has no symbol table...................................179
       Program linked with wrong linker version......................179
       Program not found.............................................179
       Register cannot be used with this operator....................180
       Register or displacement expected.............................180
       Run out of space for reystroke macros.........................180
       Search expression not found...................................180
       Source file ___ not found.....................................180
       Symbol not found..............................................181
       Symbol table not found........................................181
       Syntax error..................................................181
       Too many files match wildcard mask............................181
       Type EXIT to return to Turbo Debugger.........................181
       Unexpected end of line........................................181
       Unknown character.............................................182
       Unknown record, union or structure name.......................182
       Unknown symbol................................................182
       Unterminated string...........................................182

Value must be between nn


       Value must be between nn and nn...............................182
       Value out of range............................................182

       TDeb 3.0 #3-3                 = 7 =
       Video mode not avaliable......................................183
       Video mode swithed while flipping pages.......................183
       You are not debugging a Window program........................183
       Информационные сообщения......................................184
       Waiting for handshake from TDREMOTE (Ctrl-Break to quit)......184

       TDeb 3.0 #3-3                 = 8 =
                 Глава 17. Турбо отладчик для Windows (TDW)
       -----------------------------------------------------------------
            Турбо отладчик для Windows (TDW) позволяет отлаживать  прик-
       ладные  программы,  написанные для Microsoft Windows версии 3.0 и
       старше. Он работает под управлением Windows на той же машине, что
       и  отлаживаемая  программа,  и выполняет переключения между собс-
       твенными экранами и экранами отлаживаемой  прикладной  программы,
       как это делает Турбо отладчик.
            Отладка происходит  во  многом  аналогично отладке с помощью
       Турбо отладчика, за исключением того, что здесь вы получаете дос-
       туп к информации, являющейся специфичной для Windows, например:
            - Сообщения,  принимаемые  и  посылаемые  окнами  прикладной
              программы;
            - Глобальная динамически распределяемая область памяти;
            - Локальная динамически распределяемая область памяти;
            - Полный список  модулей  (включая  динамически  компонуемые
              библиотеки DLL), загружаемых Windows;
            - Отладка динамически компонуемых библиотек (DLL).
                         Требования для запуска TDW
       -----------------------------------------------------------------
            Отладчик TDW работает в стандартном  или  улучшенном  режиме
       386, что означает необходимость иметь компьютер с процессором как

и как минимум один мегабайт


       минимум 80286 или выше, и как минимум один мегабайт памяти.
            TDW поддерживает только стандартные графические режимы дисп-
       лея:  CGA,  EGA,  VGA,  SVGA  и  монохромную  графическую   плату
       Hercules. Если  вы  используете необычный драйвер,  то прежде чем
       запускать Windows и TDW,  перейдите на стандартный драйвер.  Если
       вы  попытаетесь использовать при работе с TDW нестандартный драй-
       вер,  то не сможете переключаться между экранами TDW и прикладной
       программы.
            Используя DLL с именем TDVIDEO.DLL  TDW  поддерживает  Super
       VGA. С  TDW распространяется множество DLL,  которые поддерживают
       различные платы Super VGA (описанные в файле README на  дистрибу-
       тивной дискете).  Чтобы использовать c TDW эти DLL, скопируйте их
       в каталог, где находится TDW.EXE, и назовите TDVIDEO.DLL.
            Если  вы  не найдете DLL, поддерживающую  плату  Super  VGA,
       свяжитесь с фирмой Borland.
            Как и Турбо отладчик, TDW может использовать второй монитор,
       подключенный  к компьютеру,  что дает возможность на одном экране

       TDeb 3.0 #3-3                 = 9 =
       просматривать вывод TDW,  а на другом - прикладной программы. Для
       этого  нужно  запустить TDW с параметром командной строки -do или
       выполнить утилиту TDINST, установив User Screen Updating в значе-
       ние Other display.
                                Установка TDW
       -----------------------------------------------------------------
            При установке в системе Турбо отладчика программа  установки
       помещает файлы, относящиеся к работе в Windows, в тот же каталог,
       что и файлы Турбо отладчика. Это файлы:
            - TDW.EXE, собственно отладчик TDW;
            - TDWHELP.TDH, файлы системы подсказки TDW;
            - WRSETUP.EXE,  утилита настройки конфигурации для программы
              удаленной отладки в Windows WREMOTE;
            - WREMOTE.EXE,  программа удаленной отладки прикладных прог-

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


              рамм для Windows.  (Удаленная отладка в Windows описана  в
              Приложении E);
            - WINDEBUG.DLL,  динамически компонуемая библиотека, необхо-
              димая для выполнения TDW и WREMOTE;
            - TDDEBUG.386,  программа, которую загружает Window для под-
              держки прерывания программы по Ctrl-Alt-SysRq и аппаратной
              отладки.
            Процесс установки создает пиктограммы  для  TDW,  WRSETUP  и
       WREMOTE  и помещает их под группой Windows Applications (приклад-
       ные программы для Windows) менеджера программ Windows.  Вы можете
       запустить  одну из этих программ,  выбрав соответствующую пиктог-
       рамму, как и для любых других прикладных программ Windows.

       TDeb 3.0 #3-3                = 10 =
                         Настройка конфигурации TDW
       -----------------------------------------------------------------
            Как и в случае работы с Турбо отладчиком,  вы можете настро-
       ить  конфигурацию TDW двумя способами - при помощи параметров ко-
       мандной строки или при помощи утилиты TDINST  (с  параметром  ко-
       мандной строки -w).
               Использование параметров командной строки TDW
       -----------------------------------------------------------------
            Как и для Турбо отладчика, вы можете установить конфигурацию
       TDW, используя различные параметры командной строки,  за которыми
       может следовать необязательное имя программы со своими  собствен-
       ными параметрами.  Имени программы может предшествовать имя марш-
       рута.
            Поскольку TDW является программой для Windows,  вы  вероятно
       будете вводить параметры командной строки либо при помощи команды
       File¦Run (Файл¦Выполнение) менеджера программ,  либо  при  помощи
       команды File¦Properties (Файл¦Свойства) менеджера программ, чтобы
       изменить свойства командной строки пиктограммы TDW.  Вы также мо-

жете запустить Windows из командной


       жете запустить Windows из командной строки DOS и использовать ко-
       манду TDW,  за которой могут в произвольном порядке следовать па-
       раметры  командной  строки,  либо имя программы с параметрами или
       без,  либо и то,  и другое - и  все  это  как  аргументы  команды
       Windows.
            Синтаксис командной строки для TDW имеет следующий вид:
            TDW [параметры] [имя_программы [аргументы_программы]]
            Отладчик TDW имеет меньше параметров командной  строки,  чем
       Турбо отладчик TD.  За исключением параметра -t,  используемые им
       параметры совпадают с параметрами Турбо отладчика,  которые расс-
       матривались выше.
            Ниже приводятся параметры командной строки TDW:
        -----------T---------------------------------------------------¬
        ¦-?, -р    ¦  Обращение  за  подсказкой  о параметрах командной¦
        ¦          ¦  строки TDW.                                      ¦
        ¦          ¦                                                   ¦
        ¦-c<файл>  ¦  Использование файла конфигурации <файл>.         ¦
        ¦          ¦                                                   ¦
        ¦-do       ¦  Запуск TDW на вторичном дисплее.                 ¦
        ¦          ¦                                                   ¦
        ¦-ds       ¦  Обновление   экранов  путем  свопинга  (подкачки)¦
        ¦          ¦  страниц.                                         ¦
        ¦          ¦                                                   ¦
        ¦-l        ¦  Запуск в режиме Ассемблера. Отладка  кода началь-¦
        ¦          ¦  ной загрузки библиотеки DLL.                     ¦

       TDeb 3.0 #3-3                = 11 =
        ¦          ¦                                                   ¦
        ¦-p        ¦  Использование "мыши".                            ¦
        ¦          ¦                                                   ¦

Один из этих параметров командной


        ¦-sc       ¦  Игнорировать регистр в именах идентификаторов.   ¦
        ¦          ¦                                                   ¦
        ¦-sdкаталог¦  Установить в качестве каталога с исходными файла-¦
        ¦          ¦  ми указанный каталог.                            ¦
        ¦          ¦                                                   ¦
        ¦-tкаталог ¦  Установить в качестве начального каталога  запус-¦
        ¦          ¦  ка указанный каталог.                            ¦
        L----------+----------------------------------------------------
            Один из этих параметров командной строки, параметр t, досту-
       пен только в TDW. Этот параметр изменяет начальный каталог запус-
       ка TDW, т.е. каталог, в котором TDW ищет файл конфигурации и фай-
       лы .EXE,  не заданные с полным маршрутом. Синтаксис этой парамет-
       ра:
            -tимя_каталога
            Этот параметр позволяет установить только один начальный ка-
       талог запуска.  Если  ввести с помощью одного параметра несколько
       таких каталогов, то TDW все их игнорирует. Если указать несколько
       параметров -t  с разными каталогами,  то TDW использует последний
       из них.

       TDeb 3.0 #3-3                = 12 =
                        Использование TDINST для TDW
       -----------------------------------------------------------------
            Чтобы воспользоваться  программой TDINST для TDW,  запустите
       TDINST с параметром командной строки -w.  TDINST для TDW работает
       аналогично TDINST для Турбо отладчика,  за исключением того,  что
       файл конфигурации по умолчанию будет называться  TDCONFIG.TDW,  и
       доступно меньше  параметров.  (См.  список  параметров  командной
       строки TDW в предыдущем разделе).
            Описание использования TDINST см. в Приложении D.
                              Использование TDW
       -----------------------------------------------------------------

При запуске TDW он появляется


            При запуске TDW он появляется в полноэкранном символьном ре-
       жиме DOS, а не в окне. Несмотря на такой внешний вид,  TDW -  это
       прикладная программа Windows и работать может только в Windows.
            В отличие от других работающих в Windows программ, вы не мо-
       жете использовать оперативные клавиши Windows (типа  Alt-Esc  или
       Ctrl-Esc)  для  выхода из экрана TDW.  Однако,  если отлаживаемая
       прикладная программа является активной (курсор активен в одном из
       ее окон),  вы  можете использовать эти клавиши или "мышь" для пе-
       реключения на другие программы.
            Отладка в TDW во многом похожа на отладку в Турбо отладчике,
       за исключением нескольких свойств Турбо отладчика,  которые рабо-
       тают иначе,  и нескольких дополнительных свойств, помогающих при-
       отладке программ для Windows.
                    Различия между TDW и Турбо отладчиком
       -----------------------------------------------------------------
            Различными являются следующие свойства:
            - Переключение из вашей прикладной программы в TDW  выполня-
              ется при помощи комбинации клавиш Ctrl-Alt-SysRq. Эта опе-
              рация аналогична использованию Ctrl-Break для переключения
              из прикладной программы для DOS в Турбо отладчик,  за иск-
              лючением того,  что при этом прикладная программа для  DOS
              завершается, а для Windows - только приостанавливается.
            - Параметр  командной  строки -l не только позволяет отлажи-
              вать начальный код загрузки вашей прикладной  программы, а
              также позволяет отлаживать ассемблерный начальной код заг-
              рузки любой DLL, компонуемой с вашей программой.
            - Если это возможно, выполните вашу программу до ее нормаль-
              ного  конца  или  используйте команду System для выхода из
              нее до выхода из TDW или загрузки другой программы для от-

Нештатный выход из прикладной программы


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

       TDeb 3.0 #3-3                = 13 =
              сы,  что  в  свою очередь может вызвать проблемы у TDW или
              другой прикладной программы.
            - Запись нажатий клавиш не выполняется.
            - Нельзя отлаживать драйверы устройств или резидентные прог-
              раммы.
            - Не поддерживается аппаратная отладка. (Если хотите, вы мо-
              жете оставить устройство TDH386.SYS в CONFIG.SYS.  Это  не
              помешает работе Windows или TDW).
            - Следующие команды меню File недоступны,  поскольку TDW ра-
              ботает под управлением Windows:
                 * DOS Shell, т.к. оболочка отсутствует;
                 * Resident,  т.к.  TDW  не может по завершении остаться
                   резидентным;
                 * Table Relocate, поскольку вы не можете установить ба-
                   зовый сегмент таблицы символических имен.

       TDeb 3.0 #3-3                = 14 =
                             Новые средства TDW
       -----------------------------------------------------------------
            Новые свойства,   поддерживаемые   отладчиком  программ  для
       Windows:
            - Окно просмотра Windows Messages (Сообщения Windows), пока-
              зывающее сообщения,  передаваемые окнам в вашей программе.
            - В окне регистрации Log вы имеете возможность выводить сле-
              дующие три типа данных:
                 * Сегменты данных, расположенные в локальной динамичес-
                   ки распределяемой области вашей прикладной программы;
                 * Сегменты  данных,  расположенные в глобальной динами-
                   чески распределяемой области;
                 * Полный список модулей,  составляющих программу, вклю-
                   чая динамически компонуемые библиотеки (DLL);

Приведение типа выражений от логических


                 * Приведение типа выражений от логических номеров памя-
                   ти к дальним указателям.
            - Отладка динамически компонуемых библиотек (DLL).
            - Параметр  командной  строки -t,  позволяющий устанавливать
              начальный каталог запуска TDW,  чтобы можно было использо-
              вать файл конфигурации или файлы .EXE из этого каталога.
                        Регистрация сообщений Windows
       -----------------------------------------------------------------
            Для трассирования передаваемых в окна вашей прикладной прог-
       раммы сообщений   выберите    команду    View¦Windows    Messages
       (Обзор¦Сообщения Windows),  чтобы  открыть окно Windows Messages.
       Это окно показывает сообщения,  которые Windows посылает  в  одно
       или более окон вашей программы.

       TDeb 3.0 #3-3                = 15 =
            Окно Windows  Messages  (Сообщения  Windows) состоит из трех
       областей: области выбора окна Window Selection (верхняя левая об-
       ласть), области  класса  сообщений  Message Class (верхняя правая
       область) и области сообщений Messages (нижняя область). Сообщения
       показывает область Messages.
           г=[*]===Windows messages===================3======[ ][ ]¬
           ¦Windowproc wndproc-------¦Log-message-WM-PAINT---------¦
           ¦                         ¦                             ¦
           ¦                         ¦                             ¦
           ¦                         ¦                             ¦
           ¦--------------------------<--------------------------->¦
           ¦Hwnd:2214 wParam:0000 lParam:000000000 (000f) WM PAINT ¦
           L=======================================================-
             Рис. 17.1 Окно Windows Messages

       TDeb 3.0 #3-3                = 16 =
                                 Выбор окна
       -----------------------------------------------------------------

Прежде чем вы сможете регистрировать 


            ---------------¬
            ¦ Add...       ¦         Добавить
            ¦ Remove       ¦         Удалить
            ¦ Delete All   ¦         Удалить все
            L---------------
            Прежде чем вы сможете регистрировать  сообщения,  вы  должны
       сначала указать, для которого окна будут регистрироваться сообще-
       ния. Это выполняется в верхней левой области, области выбора окна
       Window Selection. Локальное меню этой области (активируемое нажа-
       тием клавиш  Alt-F10) позволяет добавить выбранное окно,  удалить
       выбранное окно или удалить все выбранные окна.
                         Добавление выбранного окна
       -----------------------------------------------------------------
            Для того, чтобы добавить выбранное окно, вы можете либо выб-
       рать  команду  Add (Добавление) из локального меню области Window
       Selection (Выбор окна),  либо просто начать ввод в области. В том
       и другом случае вы получите окно диалога:
            Вы можете  в этом окне ввести либо имя подпрограммы, которая
       обрабатывает сообщения для окна (выбрав  "кнопку"  Window  Proc),
       либо значение логического номера (выбрав "кнопку" Handle). Введи-
       те столько имен подпрограмм или логических номеров, сколько нужно
       для трассировки сообщений для ваших окон.
                  г[*]==Add window or handle to watch======¬
                  ¦                                        ¦
                  ¦ Window identifier                      ¦
                  ¦ -----------------              OK      ¦
                  ¦                                ------  ¦
                  ¦                                Cancel  ¦
                  ¦ Identify by                    ------  ¦
                  ¦   (*) Window proc              Help    ¦
                  ¦   ( ) Handle                   ------  ¦
                  ¦                                        ¦

Add window or handle to


                  L========================================-
            Рис. 17.2 Диалоговое окно Add Window
            Add window or handle to watch - добавить окно  или описатель
       для просмотра;  Window identifier - идентификатор окна;  Identify
       by - идентификация по...;  Window proc - процедура окна; Handle -
       описатель; OK - нормально; Cancel - отмена; Help - справка.
                 Примечание: Ввод в этом окне первого значения также ус-
            танавливает класс сообщений в "Log all messages" ("Регистра-
            ция всех сообщений").

       TDeb 3.0 #3-3                = 17 =
            Легче указать окно по имени подпрограммы, обрабатывающей его
       сообщения  (например,  WndProc),  поскольку  вы можете ввести имя
       подпрограммы в любой момент после загрузки вашей программы.
            Если вы предпочитаете использовать имя переменной с логичес-
       ким номером, вы должны сначала перейти по программе к строке, где
       этой переменной присваивается логический номер.  (Для  пошагового
       перемещения по программе служат клавиши F7 или F8). Если вы пыта-
       етесь ввести  имя переменной до этого оператора присваивания, TDW
       не сможет принимать сообщения для этого логического номера.
       Выбор окна для прикладной программы, использующей ObjectWindows
       -----------------------------------------------------------------
            Если вы   отлаживаете   прикладную  программу,  использующую
       ObjectWindows, и выбираете  команду  View¦Windows  Messages  (Об-
       зор¦Сообщения Windows), то по умолчанию выводится диалоговое окно
       Windows Messages (Сообщения Windows),  показанное на  Рис.  17.1.
       Для стандартных   программ   Windows   и  программ,  использующих
       ObjectWindows, это окно работает одинаково,  только имя процедуры
       Windows вы  использовать не сможете.  Вместо этого для того окна,
       сообщения которого вы хотите  регистрировать  или  по  сообщениям

Перед тем, как вы сможете


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

       TDeb 3.0 #3-3                = 18 =
                          Получение описателя окна
       -----------------------------------------------------------------
            Перед тем, как вы сможете использовать описатель объекта ок-
       на, нужно выполнить программу и пройти то место, где он инициали-
       зируется. Для этого можно использовать несколько методов.
            - Простейший  способ  состоит  в  запуске  вашей программы и
              возврате в TDW по Ctrl-Alt-SysRq.
            - Другая  возможность заключается в задании точки останова в
              подпрограмме обработки сообщений (примером  которой  может
              быть подпрограмма, обрабатывающая сообщения WM_MOUSEMOVE),
              и последующем выполнении в окне действия, которое приведет
              к срабатыванию точки останова (например,  перемещения "мы-
              ши").
            - Если основные проблемы у вам заключаются в самом окне (та-
              кие, как невосстановимая ошибка прикладной программы, воз-
              никающая при первоначальном выводе окна),  получать указа-
              тель окна придется более длинным путем.
              Так как описатель инициализируется  функцией ObjectWindows
              CreateWindow, и данная функция выполняется после того, как
              вы инициализируете окно,  то  нужно переопределить в клас-
              се  окна  эту функцию и для получения описателя установить
              на ней точку прерывания.
              Например, в следующем исходном коде данная функция переоп-
              ределяется для  класса   окна   ScribbleWindow   программы
              TDODEMO:
                void ScribbleWindow()
                {
                         TWindow::SetupWindow();
                }
              Далее позиционируйте курсор на строке после оператора ини-
              циализации и нажмите F4 для выполнения  программы  до  той

После этого вы  можете  вставлять 


              точки,  где  инициализируется описатель окна,  диалогового
              окна или управляющего элемента. В данном примере нужно по-
              зиционировать  курсор  на  закрывающей  квадратной  скобке
              функции SetupWindow.
            После того,  как  описатель инициализирован и вы вернулись в
       TDW, выбрав команду Data¦Inspect (Данные¦Проверка)  и  введя  имя
       соответствующего объекта          окна         (в         TDODEMO
       WinMain#MyApp.MainWindow), можно получить описатель окна. Найдите
       элемент данных  HWindow  и скопируйте его в окно Clipboard (нажав
       клавиши Shift-F3).  После этого вы  можете  вставлять  содержимое
       HWindow в  качестве  описателя в диалоговом окне Add (Добавление)
       или в верхней левой области окна Window Messages (нажмите клавиши
       Shift-F4 в текстовом поле ввода диалогового окна).

       TDeb 3.0 #3-3                = 19 =
            Задание окна с разрешенной поддержкой ObnjectWindows
       -----------------------------------------------------------------
            Если вы запускаете программу TDINST с  параметром  командной
       строки -w,  то можете включить в TDW поддержку сообщений окна для
       ObjectWindows. Когда данный параметр включен, вы можете использо-
       вать имена оконных объектов,  как если бы они описывались в вашей
       прикладной программе.
            При выборе команды  View¦Windows  Messages  (Обзор¦Сообщения
       окна) при  включенном  параметре OWL на экран выводится следующий
       экран:
           г=[*]===OWL Windows Messages===============3======[ ][ ]¬
           ¦Window-object-11c5:006e--¦Log-all-messages-------------¦
           ¦                         ¦                             ¦
           ¦                         ¦                             ¦
           ¦                         ¦                             ¦
           ¦-------------------------+<--------------------------->¦

Окно Windows  Messages  с 


           ¦Hwnd:2214 wParam:0000 lParam:000000000 (000f) WM PAINT ¦
           ¦                                                       ¦
           ¦                                                       ¦
           ¦                                                       ¦
           L=======================================================-
            Рис. 11. 1 Окно Windows  Messages  с  разрешенной  поддержкой
       ObjectWindows
                   --------------¬
                   ¦ Add...      ¦      Добавить
                   ¦ Remove      ¦      Отменить
                   ¦ Delete All  ¦      Удалить все
                   L--------------
            Перед тем,  как  вы сможете регистрировать сообщения,  нужно
       сначала указать,  для какого окна регистрируются  сообщения.  Это
       можно сделать в левой верхней области - области выбора окна.  Ло-
       кальное меню области (которое активизируются с помощью клавиш Alt
       -F10) позволяет вам добавить окно, удалить окно, или отменить все
       выбранные окна.
        Добавление выбора окна с разрешенной поддержкой ObjectWindows
       -----------------------------------------------------------------
            Перед тем,  как  вы сможете использовать объект окна,  нужно
       выполнить программу и пройти то место,  где он  инициализируется.
       Обычно объект инициализируется в операторе, аналогичном следующе-
       му оператору в определении функции в TDODEMO:
            void CScribbleAllocation::InitMainWindow()
            {
                MainWindow = new ScribbleWindow(NULL, Name);

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

После инициализации  оконного объекта вы


            После инициализации  оконного объекта вы можете добавить его
       в область выбора окна.  Для добавления выбранного окна вы  можете
       либо выбрать команду Add (Добавление) локального меню области вы-
       бора окна,  либо начать ввод в этом окне имени объекта.  Любой из
       методов выводит диалоговое окно Add Window (Добавление окна).
            Если вы  не  находитесь в той подпрограмме,  где описывается
       объект, для доступа  к  нему  требуется  переопределение  области
       действия. Например, в TDODEMO MainWindow является элементом MyApp
       (так как MyApp представляет собой тип CScribbleApplication, кото-
       рый является производным от TApplication, а TApplication содержит
       элемент данных с именем MainWindow). Однако, поскольку MyApp опи-
       сывается в  функции WinMain,  то если вы не находитесь в этой фу-
       нкции, доступа к MyApp у вас нет. Таким образом, переопределением
       области действия,  которое  обеспечивает  работу в данном модуле,
       является  WinMain#MyApp.MainWindow.

       TDeb 3.0 #3-3                = 21 =
                  г[*]=Add window or handle to watch========¬
                  ¦                                         ¦
                  ¦ Window identifiers                      ¦
                  ¦ ---------------------------             ¦
                  ¦                                   OK    ¦
                  ¦                                 ------- ¦
                  ¦                                         ¦
                  ¦                                  Cancel ¦
                  ¦ Identified by                   ------- ¦
                  ¦  (.) Window object                      ¦
                  ¦  ( ) Handle                      Help   ¦
                  ¦                                 ------- ¦
                  ¦                                         ¦
                  L=========================================-