
Приложение B
Технические замечания
-----------------------------------------------------------------

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

     Часть приводимой здесь информации  описывает  взаимодействие
Turbo Debugger с DOS, аппаратным обеспечением и вашей программой.
Это поможет вам понять , каким образом может измениться поведение
вашей программы при выполнении ее в среде Turbo Debugger.

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

Изменение адреса загрузки и объема свободной памяти
-----------------------------------------------------------------

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

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

Фатальный сбой системы
-----------------------------------------------------------------

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

     Например, изменение  вектора прерывания аппаратного таймера,
находящегося в  ячейке  0000:0040,  практически  всегда  вызывает
проблемы.

Трассировка внутри DOS и переключение идентификатора процесса
-----------------------------------------------------------------

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

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

Использование арифметического сопроцессора 8087/80287 и эмулятора
-----------------------------------------------------------------

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

Прерывания, используемые отладчиком Turbo Debugger
-----------------------------------------------------------------

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

     Прерывание 1/Прерывание 3

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

     Прерывание 2

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

     Прерывание 9

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

Отладка с использованием прерываний INT3 и INT1
-----------------------------------------------------------------

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

Сохранение отображения и переключение режимов
-----------------------------------------------------------------

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

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

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

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

Поддержка расширенной памяти
-----------------------------------------------------------------

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

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

Сохранение и восстановление векторов прерывания
-----------------------------------------------------------------

     Отладчик Turbo  Debugger  поддреживает  три  различные копии
первых 48 векторов прерывания в памяти с младшими адресами (от 00
до 2F).

     При запуске  отладчика  из  командной строки DOS выполняется
копирование этих  векторов.  Эти  вектора  восстанавливаются  при
возврате  в  DOS  с  помощью  команды File/Quit (или Alt-X).  Эти
вектора также восстанавливаются, если вы используете команду File
/OS Shell для ввода команды DOS во время отладки программы.

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

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