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

         

Введите адрес, на который нужно


            Модифицируйте или  замените  выражение просмотра.  Подсказка
       инициализируется текущим (подсвеченным) выражением просмотра.
            Enter adress, count, byte value
            (Введите адрес, счетчик, байтовое значение)
            Введите адрес блока памяти,  которому  вы  хотите  присвоить
       конкретное байтовое значение,  затем число  байт,  которым  нужно
       присвоить это значение и само значение-заполнитель.
            Enter adress to position to
            ( Введите адрес, на который нужно позиционироваться)
            Введите адрес  блока  памяти который вы хотите просмотреть в
       своей программе. Вы можете ввести имя функции, номер строки, ука-
       затель  на память или абсолютный адрес (подробнее об этом расска-
       зывается в Главе 9).
            Enter animate delay (10ths of sec)
            (Введите задержку при автоматизированной работе (1/10 секун-
       ды))
            Задайте, с  какой  скоростью  требуется  выполнять   команду
       Animate (Автоматизировать). Чем больше значение, тем больше будет
       интервал между шагами выполнения.
            Enter code address to execute to


            (Введите адрес кода, до которого нужно выполнить программу)
            Введите адрес программы, по которому вы хотите остановить ее
       выполнение. Более подробно о вводе адресов рассказывается в Главе
       9.
            Enter comment to add to end of log
            (Введите комментарий для включение в конец протокола регист-
       рации)

       TDeb 3.0 #3-3               = 155 =
            Введите произвольную строку текста,  которая будет добавлена
       к  сообщениям,  выведенным в окне Log (Регистрация).  Текст будет
       выведен в том виде, как вы его наберете.
            Enter expression for conditional breakpoint
            (Введите выражение для условной точки останова)
            Введите выражение,  которое должно принимать истинное (нену-
       левое)  значение для срабатывания точки останова.  При выполнении

программы данное выражение будет вычисляться


       программы данное выражение будет вычисляться каждый раз при обна-
       ружении точки останова. При этом нужно учитывать возможные побоч-
       ные эффекты вычисления выражения.
            Enter expression to watch
            (Введите выражение для просмотра)
            Введите имя  переменной или выражение,  значение которого вы
       хотите наблюдать в окне Watch  (Просмотр).  Если  хотите,  можете
       ввести выражение, которое не ссылается на ячейку памяти, например
       x * y + 4. Если диалоговое окно инициализируется из текстовой об-
       ласти,  то вы можете воспринять запись, нажав клавишу Enter, либо
       изменить ее или ввести что-то совсем другое.
            Enter inspect start index, range
            (Введите первый индекс для проверки, диапазон)
            Введите индекс  первого элемента массива,  который вы хотите
       просмотреть.  За индексом укажите число просматриваемых элементов
       массива (разделив их пробелом или запятой).
            Enter instruction to assemble
            (Введите инструкцию для ассемблирования)
            Введите инструкцию Ассемблера для замены инструкции по теку-
       щему адресу в области кода. Список инструкций и ключевых слов Ас-
       семблера содержится в одном из приложений. Более подробно о языке
       Ассемблера рассказывается в Главе 12.
            Enter log file name
            (Введите имя файла регистрации)
            Введите имя файла,  в который вы хотите записывать регистри-
       руемую информацию. Все строки регистрации в том виде, как они вы-
       водятся в соответствующем окне,  будут записываться  в  указанный
       файл до выполнения команды Close (Закрыть). По умолчанию файл бу-
       дет иметь расширение .LOG и имя,  совпадающее с именем отлаживае-
       мой  программы.  Для  этого можно просто нажать клавишу Enter.  В
       противном случае наберите новое имя.
            Enter memory adress, count
            (Введите адрес в памяти, счетчик)

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


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

       TDeb 3.0 #3-3               = 156 =
       ные запятая и число элементов,  которые вы хотите очистить. Можно
       использовать имя идентификатора или полное выражение.
            Enter name оf configuration file
            (Введите имя файла конфигурации)
            Введите имя  файла  конфигурации для чтения или записи.  При
       чтении из файла можно вводить трафаретные символы (маску) и полу-
       чить список соответствующих им файлов для выбора.
            Enter name of file to view
            (Введите имя файла для просмотра)
            Для получения  списка  файлов  для выбора можно использовать
       трафаретные символы DOS (* и ?),  либо ввести  для  загрузки  имя
       конкретного файла.
            Enter new bytes
            (Введите новые байты)
            Введите список байт,  которые заменят байты в позиции файла,
       отмеченной  курсором.  Полное  описание  списка байт содержится в
       Главе 9.
            Enter a new coprocessor register value
            (Введите новое значение регистра сопроцессора)
            Введите новое значение для текущего (подсвеченного) регистра
       арифметического сопроцессора. Для генерации нового значения можно
       ввести  полное  выражение.  Оно  будет преобразовано в правильный
       формат с плавающей точкой и загружено в регистр.
            Enter new data bytes
            (Введите новые байты данных)
            Введите байтовый список в позиции сегмента, отмеченных кур-
       сором. Полное описание списка байт содержится в Главе 9.
            Enter new directory
            (Введите новый каталог)
            Введите новое  имя каталога или диска,  которые должны стать
       текущими.
            Enter new file offset
            (Введите новое смещение в файле)
            Вы просматриваете  файл  на  диске в шестнадцатиричном виде.
       Если вы вводите номер строки, превышающий число строк в файле, то

где расположен курсор, соответствует первой


       увидите последнюю строку в файле.  Строки нумеруются с 1. Текущий
       номер строки,  где расположен курсор, соответствует первой строке
       в окне Module (Модуль).

       TDeb 3.0 #3-3               = 157 =
            Enter new line number
            (Введите номер новой строки)
            Введите номер строки,  которую вы хотите просмотреть в теку-
       щем модуле. Если этот номер превышает число строк в файле, то вы-
       ведется последняя строка файла. Номера строк начинаются с 1 (пер-
       вая строка  файла.  Текущая  строка,  на  которой  позиционирован
       курсор, выводится в качестве первой строки окна Module.
            Enter new relocation segment value
            (Введите новое значение перемещаемого сегмента)
            Введите выражение  на текущем языке.  Оно будет использовано
       для задания адреса базового сегмента таблицы идентификаторов, ко-
       торую  вы загрузили с помощью команды File¦Symbol Load (Файл¦Заг-
       рузка таблицы идентификаторов).  При вычислении вводимого выраже-
       ния должно получаться значение номера сегмента в начале кода, для
       которого вы загружаете таблицу идентификаторов.
            Enter new selector
            (Введите новый селектор)
            Введите значение селектора,  который вы хотите сделать теку-
       щим. Вы можете ввести фактическое шестнадцатиричное  значение или
       значение сегментного регистра (CS, DS или ES).
            Enter new value
            (Введите новое значение)
            Введите новое значение для текущего (подсвеченного) регистра
       ЦП. Для  форматирования нового значение можно ввести полное выра-
       жение.
            Enter port number
            (Введите номер порта)
            Введите номер порта ввода-вывода,  из которого нужно  выпол-
       нить чтение. Допустимые номера - от 0 до 65535.
            Enter port number, value to output
            (Введите номер порта и значение для вывода)

файлов для выбора можно использовать


            Введите номер порта ввода-вывода,  в который нужно выполнить
       запись,  и значение для записи,  разделив эти два выражения запя-
       той. Допустимые номера - от 0 до 65535.
            Enter program name to load
            (Введите имя программы для загрузки)
            Введите имя отлаживаемой  программы.  Для  получения  списка
       файлов для выбора можно использовать трафаретные символы DOS, ли-
       бо ввести имя конкретного файла для загрузки. Если вы не указыва-
       ете расширения,   подразумевается  расширение  .EXE  (выполняемый

       TDeb 3.0 #3-3               = 158 =
       файл).
            Enter read file name
            (Введите имя файла для чтения)
            Введите имя  файла  или спецификацию с использованием трафа-
       ретных символов, который вы хотите считать в память. Если вы вве-
       дете  трафаретную  спецификацию или по умолчанию используете *.*,
       то выведется список файлов для выбора.
            Enter search bytes
            (Введите байты для поиска)
            Введите список байт для поиска,  начиная с текущей позиции в
       памяти, отмеченной курсором. Подробнее о списках байт рассказыва-
       ется в Главе 9.
            Enter search instruction or bytes
            (Введите инструкцию или байты для поиска)
            Введите инструкцию (для команды  локального  меню  Assemble)
       или байтовый список (для команды локального меню  Search  (Поиск)
       области данных).
            Enter search string
            (Введите строку для поиска)
            Введите символьную строку для поиска. Для выявления неточных
       соответствий  можно использовать простые трафаретные символы (* -
       один или более символов, ? - один символ).
            Enter set breakpoint at code address
            (Введите адрес в программе для задания точки останова)
            Введите адрес программы,  по которому вы  хотите  установить
       точку  останова.  Более подробно о вводе адресов рассказывается в

и адрес, куда их нужно


       Главе 9.
            Enter source address, destination, count
            (Введите исходный, целевой адрес и значение счетчика)
            Введите адрес блока,  который вы хотите  переместить,  число
       перемещаемых байт и адрес, куда их нужно переместить. Все три вы-
       ражения разделяются запятыми.
            Enter source directory path
            (Введите маршрут исходных файлов)
            Введите список каталогов, разделив их точками с запятой. По-
       иск  исходных файлов в этих каталогах будет выполняться в том по-
       рядке, как они указаны.
            Enter symbol table name

       TDeb 3.0 #3-3               = 159 =
            (Введите имя таблицы идентификаторов)
            Введите имя таблицы идентификаторов для загрузки ее с диска.
       Обычно  эти  файлы имеют расширение .TDS.  Расширение имени файла
       нужно указывать явно.
            Enter tab column spacing
            (Введите размер табуляции)
            Введите число от 1 до 32,  которое задает позицию  табуляции
       при  выводе Турбо отладчиком файлов в окне File (Файл) или Module
       (Модуль).
            Enter valiable to inspect
            (Введите переменную для проверки)
            Введите имя переменной или выражение, содержимое которого вы
       хотите проверить.  Если  подсказка  инициализируется  из  области
       текста,  то вы можете использовать выведенное имя,  нажав клавишу
       Enter, или полностью набрать новую запись.
            Enter variable to inspect
            (Введите переменную для проверки)
            Введите имя переменной или выражение, содержимое которого вы
       хотите проверить в качестве массива. Если подсказка инициализиру-
       ет  из области текста,  то вы можете использовать выведенное имя,
       нажав клавишу Enter, или полностью набрать новую запись.
            Enter write file name
            (Введите имя файла для записи)
            Введите имя файла, в которых вы хотите записать блок памяти.

Вы задали имя файла, который


            Overwrite__?
            (Затереть?)
            Вы задали имя файла, который уже существует. Вы можете зате-
       реть старое содержимое этого файла, заменив его новым, либо отме-
       нить данную команду и оставить старое содержимое без изменений.
            Overwrite existing macro or selected key?
            (Перезаписать существующую макрокоманду или выбранную клави-
            шу?)
            Вы нажали клавишу для записи макрокоманды, а ей уже присвое-
       на макрокоманда. Если вы хотите отменить существующую макрокоман-
       ду, нажмите Y (Да). Для отмены команды нажмите N (Нет).
            Pick a method name
            (Выбор имени метода)
            Вы задали имя подпрограммы,  которая ссылается более чем  на

       TDeb 3.0 #3-3               = 160 =
       один метод в объекте. Выберите корректный метод из списка имен.
            Pick a module
            (Выбрать модуль)
            Выберите имя  модуля,  который  вы хотите просмотреть в окне
       Module (Модуль). Вам будет выведен список всех модулей программы.
       Для просмотра файла,  который не является модулем программы,  ис-
       пользуйте команду меню View¦File (Обзор¦Файл).
            Pick a name
            (Выберите имя)
            Выверите имя  из списка выведенных на экран идентификаторов.
       Вы можете начать ввод имени и автоматически  позиционироваться на
       первый символ, соответствующий тому, что вы уже набрали.
            Pick a source file
            (Выберите исходный файл)
            Выберите исходный  файл  из  выведенного  списка  (выводятся
       только исходные файлы, входящие в текущий программный модуль).
            Pick a window
            (Выберите окно)
            Выберите окно из списка заголовков активных окон.
            Pick macro to delete
            (Выберите макрокоманду для удаления)
            Выберите клавишу  или сочетание клавиш макрокоманды, которую
       вы ходите удалить.  Клавиша получит первоначальное функциональное

Press key to assign macro


       значение (которое было до макрокоманды).
            Press key to assign macro to
            (Нажмите клавишу, которой будет присвоена макрокоманда)
            Нажмите клавишу,  которой  вы хотите присвоить макрокоманду.
       Затем нажмите клавиши для формирования последовательности команд,
       которую  вы  хотите присвоить данной клавише.  Эта последователь-
       ность будет выполняться в том виде, как вы ее введете. Для завер-
       шения  последовательности  и записи макрокоманды нажмите клавишу,
       которой вы присваиваете макрокоманду.  Данная макрокоманда  будет
       записана  на диске наряду с другими клавиатурными макрокомандами.
            Program already terminated; reload?
            (Программа завершила работу. Перезагрузить?)
            Вы пытаетесь запустить или выполнить  шаг  программы,  когда
       она уже завершила работу.  Если вы ответите Y (Да), программа бу-
       дет перезагружена.  Если вы ответите N (Нет) она перезагружена не
       будет, и выполнять ее нельзя.

       TDeb 3.0 #3-3               = 161 =
            Program out of date on remote; send over link?
            (На удаленной системе находится старая версия программы. Пе-
            редать ее по линии связи?)
            Вы запустили Турбо отладчик с удаленной связью, а программа,
       которую вы хотите отладить,  либо отсутствует на удаленной систе-
       ме,  либо там находится более старая ее версия,  чем на  основной
       системе. Если вы ответите Y (Да), программа будет передана по ли-
       нии связи.  При ответе N (Нет) вы выйдите из команды.  При работе
       медленной скоростью обмена вы можете предпочесть перенос програм-
       мы через гибкий диск.  При максимальной скорости обмена время пе-
       редачи эквивалентно времени записи на гибкий диск.
            Reload program so arguments take effect?
            (Перезагрузить программу, чтобы начали действовать аргументы
            командной строки?)

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


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

       TDeb 3.0 #3-3               = 162 =
                                   Ошибки
       -----------------------------------------------------------------
            Турбо отладчик использует сообщения об ошибках,  чтобы сооб-
       щить вам о непредвиденных ситуациях. Иногда введенная вами коман-
       да не может быть обработана, в других случаях сообщения уведомля-
       ет вас, что что-то происходит не так, как вы ожидаете.
            Обычно вывод сообщений  об  ошибке  сопровождается  звуковым
       сигналом. Вы можете выключить его, используя командную строку DOS
       при запуске Турбо отладчика,  или сделать это с помощью программы
       установки TDINST.
                              Фатальные ошибки
       -----------------------------------------------------------------
            Все фатальные ошибки приводят к выходу из отладчика и  возв-
       рату  в DOS.  Некоторые такие ошибки являются результатом запуска
       отладчика из среды DOS.  В других случаях они могут возникать при
       появлении  неисправимых ситуаций в системе во время использования
       отладчика.  В любом случае ситуацию можно исправить только устра-
       нением причины сбоя и перезапуском отладчика.
            Bad configuration file
            (Плохой файл конфигурации)
            Файл конфигурации  либо  запорчен,  либо  не является файлом
       конфигурации Турбо отладчика, либо относится к его другой версии.
            Could not create dummy PSP segment

Невозможно создать пустой префикс программного


            ( Невозможно создать пустой префикс программного сегмента)
            При запуске виртуального отладчика TD386 и отсутствия загру-
       женной программы пустая программа выполняться не может. Попробуй-
       те запустить его с программой для загрузки.
             Fatal EMS error
             (Фатальная ошибка EMS)
            Драйвер памяти EMS (расширитель памяти) возвращает состояние
       невосстановимой ошибки. Аппаратура EMS неверно функционирует, ли-
       бо повреждено программное обеспечение драйвера.
            Перезагрузите систему и  повторите  попытку.  Если  ситуация
       сохраняется, проверьте аппаратуру EMS.
            Invalid switch:___
            (Недопустимый параметр)
            В командной  строке DOS вы указали недопустимый параметр-пе-
       реключатель. Список всех возможных параметров содержится в  соот-
       ветствующем приложении,  а  подробно о них рассказывается в одной
       из глав данного руководства.

       TDeb 3.0 #3-3               = 163 =
            Not enough memory
            (Недостаточно памяти)
            Турбо отладчик  при обработке вашей команды превысил границы
       рабочей памяти.
            Old configuration file
            (Старый файл конфигурации)
            Вы пытаетесь запустить Турбо отладчик с  файлом конфигурации
       из  предыдущей  версии.  Для  данной версии Турбо отладчика нужно
       создать новый файл конфигурации.
            Remote link timeout
            (Тайм-аут удаленной связи)
            Нарушена связь с удаленной системой.  Попытайтесь перезагру-
       зить обе системы и начните снова.  Если ситуация сохраняется, об-
       ратитесь к главе, где рассказывается об удаленной отладке.
            Unsupported video adapter
            (Неподдерживаемый тип видеоадаптера)
            Турбо отладчик не может определить,  какой тип видеоадаптера
       вы  используете.  Поддерживаются  следующие типы адаптеров:  MDA,
       CGA, EGA, VGA, MCGA, Hercules, Compaq composite, AT&T и совмести-

На удаленной  системе  работает несовместимая


       мые с ними.
            Wrong version of remote driver
            (Неверная версия утилиты удаленного драйвера)
            На удаленной  системе  работает несовместимая версия утилиты
       TDREMOTE или WREMOTE. Нужно использовать одну версию Турбо отлад-
       чика и программ TDREMOTE или WREMOTE.

       TDeb 3.0 #3-3               = 164 =
                            Сообщения об ошибках
       -----------------------------------------------------------------
           ')' expected
            (Нужна закрывающая круглая скобка ')')
            При вычислении выражения обнаружено, что пропущена закрываю-
       щая скобка. Это происходит, если правильно сформированное выраже-
       ние начинается с левой квадратной скобки и не заканчивается  пра-
       вой (закрывающей) скобкой, например:
            3 * (7 + 4
       вместо
            3 * (7 + 4)
           ':' expected
            (Нужно двоеточие)
            При вычислении выражения языка Си был  обнаружен  символ  ?,
       разделяющий  первые  два выражения тернарной операции ?:,  однако
       соответствующего двоеточия не найдено.
            Например:
               x < 0 ? 4 6
            Следует записать:
               x < 0 ? 4 : 6
           ']' expected
            (Нужна закрывающая квадратная скобка ']')
            При вычисления выражения была обнаружена  открывающая  квад-
       ратная  скобка  индексного  выражения массива без соответствующей
       закрывающей скобки. Например:
            table[4
       вместо
            table[4]
            Эта ошибка может возникать также при вводе инструкций встро-
       енного  Ассемблера (когда в скобках при обращении к памяти указы-
       вается базовый или индексный регистр). Например:
            mov ax,4[si
       вместо

       TDeb 3.0 #3-3               = 165 =
            mov ax,4[si]
           Already logging to a file
            (Файл регистрации уже открыт)
            Вы дали команду Open log file при уже открытом файле регист-

который не был еще закрыт


       рации, который не был еще закрыт командой Close log file. Если вы
       хотите открыть другой файл регистрации, закройте сначала текущий.
           Ambiguous symbol name
            (Неоднозначное имя идентификатора)
            Вы ввели в выражении имя идентификатора,  которое не иденти-
       фицирует уникальным образом метод в языке С++ или объект в Паска-
       ле.  При этом вы не выбираете из списка корректное имя. Перед вы-
       числением выражения вам нужно выбрать корректное имя из выводимо-
       го списка.
           Bad or mission configuration file name
            (Неверное или пропущенное имя файла конфигурации)
            В параметре командной строки  -с при запуске Турбо отладчика
       вы задали неверное имя файла конфигурации.
           Cannot access an inactive scope
            (Доступ к неактивной области действия не разрешается)
            В окне Module вы ввели выражение или указатель  на  перемен-
       ную,  которая не находится в активной функции. Переменные в неак-
       тивных функциях имеют неопределенное значение,  поэтому вы не мо-
       жете  использовать их в выражениях или просматривать их значения.
           Cannot be changed
            (Этот идентификатор изменить нельзя)
            Вы пытаетесь изменить идентификатор,  который изменить нель-
       зя. Непосредственно изменять можно только скаляры (типы int, long
       и т.д.  в языке Си, integer, longint и строки в Паскале) и указа-
       тели. Если  вы хотите изменить структуру или массив,  нужно изме-
       нять каждый их элемент отдельно.
           Can't do this when Turbo Debugger is resident
            (Когда Турбо отладчик загружен резидентно,  сделать это  не-
            возможно)
            Вы пытаетесь   выполнить   операцию,   такую  как  File¦Load
       (Файл¦Загрузка или Run¦Program Reset  (Выполнение¦Сброс  програм-
       мы), что невозможно при резидентной загрузке Турбо отладчика.
           Can't do this when user program is resident

Когда программа пользователя загружена  резидентно,


            ( Когда программа пользователя загружена  резидентно, сделать
            это невозможно)

       TDeb 3.0 #3-3               = 166 =
            Вы пытаетесь  выполнить  операцию,  такую  Run¦Program Reset
       (Выполнение¦Сброс программы),  что невозможно, когда отлаживаемая
       вами программа стала резидентной.
           Can't execute DOS command processor
            (Невозможно выполнить командный процессор DOS)
            Не хватает памяти для выполнения командного  процессора DOS,
       либо он не найден.  Убедитесь,  что переменная операционной среды
       COMSPEC правильно определяет, где можно найти командный процессор
       DOS.
           Can't go resident until user program terminates
            (Пока программа пользователя не завершит работу, резидентная
            загрузка невозможна)
            Вы пытаетесь сделать Турбо отладчик резидентным до того, как
       отлаживаемая вами программа сама стала резидентной.  Турбо отлад-
       чик может стать резидентным только тогда, когда программа не заг-
       ружена или когда загруженная программа выполнена и завершила  ра-
       боту.
           Can't set a breakpoint at this address
            (По этому адресу нельзя задать точку останова)
            Вы пытаетесь установить точку останова в области ПЗУ,  в не-
       существующей памяти или в сегменте 0.  Просмотреть программу, вы-
       полняющуюся в ПЗУ,  можно только с помощью команды Run¦Trace (Вы-
       полнение¦Трассировка) и отработке инструкций по шагам.
           Can't set any more hardware breakpoints
            (Нельзя больше установить аппаратные точки останова)
            Вы не можете установить еще одну аппаратную  точку останова,
       не  удалив  предварительно уже имеющуюся.  В различных аппаратных
       отладчиках поддерживается разное число и типы точек останова.
           Can't set hardware condition on this breakpoint
            (Для данной точки останова нельзя установить аппаратное  ус-

Вы пытаетесь установить аппаратное условие


            ловие)
            Вы пытаетесь установить аппаратное условие срабатывания точки
       останова, которая не является глобальной. Такие условия можно за-
       давать только для глобальных точек останова.
           Can't have more then one segment override
            (Более одного переопределения сегмента не допускается)
            Вы пытаетесь ассемблировать инструкцию,  в которой оба  опе-
       ранда имеют переопределение сегмента.  Иметь переопределение сег-
       мента может только один операнд, например:
            mov es:[bx],ds:1

       TDeb 3.0 #3-3               = 167 =
       а следует записать:
            mov es:[bx],1
       или
            mov ax,[1]
            mov es:[bx],ax
           Can't set a breakpoint at this location
            (Точку останова по этому адресу установить нельзя)
            Вы пытаетесь установить точку останова в ПЗУ, несуществующей
       памяти или в сегменте 0. Единственный способ просмотреть програм-
       му, выполняющуюся  в  ПЗУ  -  это использование команды Run¦Trace
       Into (Выполнение¦Трассировка вглубь) для наблюдения по одной инс-
       трукции.
           Can't set that sort of hardware breakpoint
            (Аппаратную точку останова данного типа установить нельзя)
            Драйвер устройства, установленный в файле CONFIG.SYS, не мо-
       жет работать с точкой останова с  таким  сочетанием  типа  цикла,
       сравнения с адресом или данными, которые вы задали.
           Can't set hardware condition on this breakpoint
            (Для  данной точки останова нельзя установить аппаратное ус-
            ловие)
            Вы пытаетесь задать аппаратное условие для  точки  останова,
       которая не является глобальной. Аппаратные условия можно устанав-
       ливать только для глобальных точек останова.
           Can't swap user program to disk
            (Невозможно сбросить программу пользователя на диск)
            Вы дали команду,  в которой  требуется,  чтобы  отлаживаемая

программы была записана на диск,


       программы была записана на диск, но не текущем диске для этого не
       хватает места. Нужно освободить достаточно места на  диске. Сброс
       программы  на  диск требуется при выполнении команды меню File¦OS
       Shell (Файл¦Командный процессор операционной системы) или команды
       Edit (Редактирование) области текста.
           Constructors and destructors cannot be called
            (Вызов конструкторов и деструкторов не допускается)
            Если вы пытаетесь отлаживать программу,  которая  использует
       эти объекты, то выводится сообщение об ошибке. Возможно вы пытае-
       тесь вычислить метод объекта,  являющийся конструктором или дест-
       руктором. Это не допускается.
           Count value too large

       TDeb 3.0 #3-3               = 168 =
            (Значение счетчика слишком велико)
            В области данных в окне CPU в одной из локальных команд  ра-
       боты с блоками вы ввели слишком большую длину блока. Размер блока
       не может превышать FFFFFh.
           Ctlr-Alt-SysRq interrupt. System crash possible. Continue?
            (Прерывание по Ctrl-Alt-Sysrq.  Возможен сбой системы.  Про-
            должить?)
            Вы пытаетесь выйти из TDW или перезагрузить  свою прикладную
       программу во время приостановки программы по нажатию клавиш Ctrl-
       Alt-SysRq.  Поскольку в момент приостановки программы  выполнялся
       код ядра Windows,  выход из TDW или перезагрузка прикладной прог-
       раммы будет иметь непредсказуемые результаты  (наиболее  вероятно
       "зависание" системы,  после чего потребуется последующая перезаг-
       рузка).
            Если это возможно,  установите в программе  точку  останова,
       которая  приведет  к  выходу в TDW,  а затем снова запустите вашу
       программу.  Когда программа обнаруживает точку останова и выходит
       в TDW,  вы можете завершить работу TDW или перезагрузить програм-
       му.
           Destination too far away

Вы пытаетесь  ассемблировать  инструкцию условного


            (Целевой адрес слишком далеко)
            Вы пытаетесь  ассемблировать  инструкцию условного перехода,
       целевой адрес которой отстоит слишком далеко от  текущего адреса.
       Целевой  адрес  инструкции условного перехода должен находиться в
       пределах -128 и +127 байт от самой инструкции.
           Divide by zero
            (Деление на 0)
            В выражениях  с  операциями деления (/,  div) или операциями
       mod и %  правая часть выражения при вычислении становится  равной
       0.  Поскольку  в  этом случае операции будут иметь неопределенное
       значение, выводится сообщение об ошибке.
           DLL already in list
            (DLL уже есть в списке)
            В диалоговом  окне  View¦Modules (Обзор¦Модули) вы пытаетесь
       добавить DLL к списку DLL & Programs (Программы и DLL), но библи-
       отека DLL уже находится в списке.
           Edit program not specified
            (Редактирование программы не задано)
            Вы пытаетесь использовать команду локального меню Edit  (Ре-
       дактирование) окна Module  (Модуль) или Disk File (Файл на диске),
       но при использовании программы установки команда инициализации ре-

       TDeb 3.0 #3-3               = 169 =
       дактора не была задана.
           Error loading program
            (Ошибка при загрузке программы)
            DOS не  может загрузить заданную программу.  Это может озна-
       чать,  что заданный вами файл не является допустимым файлом .EXE,
       или что он запорчен.
           Error opening file___
            (Ошибка при открытии файла)
            Турбо отладчик  не  может  открыть  файл,  который вы хотите
       просмотреть в окне File (Файл).
           Error opening log file___
            (Ошибка открытия файла регистрации)
            Имя файла,  указанное в команде локального меню Log To  File
       (Файл  регистрации)  открыть нельзя.  Это может означать,  что не
       хватает места для создания файла,  либо диск, маршрут доступа или

Заданный блок нельзя считать из


       имя  файла являются недопустимыми.  Освободите место на диске или
       задайте правильную спецификацию.
           Error reading block into memory
            (Ошибка при считывании блока в память)
            Заданный блок нельзя считать из файла в память. Возможно  вы
       указали счетчик  байт,  значение  которого превышает число байт в
       файле.
           Error saving configuration
            (Ошибка при сохранении конфигурации)
            Турбо отладчик  не может записать на диск файл конфигурации.
       Убедитесь, что на диске есть свободное место.
           Error swaping in user program, press key to load
            (Ошибка при свопинге программы  пользователя,  для  загрузки
            нажмите клавишу)
            После свопинга  (сброса) вашей программы на диск,  чтобы вы-
       полнить другую программу,  Турбо отладчик не может  перезагрузить
       ваша  программу.  Вероятнее  всего это означает,  что вы случайно
       удалили на диске файл свопинга (SWAP.$$$).  Единственное, что мо-
       жет  сделать  отладчик - это перезагрузить программу (как при ис-
       пользовании команды File¦Open (Файл¦Открыть)).
           Error writing block on disk
            (Ошибка записи блока на диск)
            Заданный вами блок нельзя записать в заданный файл. Возможно
       вы  определили счетчик,  значение которого превышает имеющийся на

       TDeb 3.0 #3-3               = 170 =
       диске объем свободного пространства.
           Error writing log file
            (Ошибка при записи файла регистрации)
            Произошла ошибка при накоплении информации из окна регистра-
       ции. Вероятно, ваш диск переполнен.
           Error writing to file
            (Ошибка записи в файл)
            Турбо отладчик не может записать изменения обратно  в  файл.
       Возможно  файл помечен,  как доступный только по чтению,  или при
       записи на диск произошла ошибка.
           Expression too complex
            (Слишком сложное выражение)

Expressions with side effects not


            Указанное вами выражение слишком сложно.  Нужно задать выра-
       жение с меньшим числом операндов и операций.  Оно может содержать
       до  64  операций и операторов.  Операндами могут быть,  например,
       константы или имена переменных.
           Expressions with side effects not permitted
            (Выражения с побочными эффектами не допускаются)
            Вы ввели выражение,  которое модифицирует ячейку памяти  при
       его  вычислении.  Когда Турбо отладчику требуется повторно вычис-
       лять выражение (например,  когда он находится в  окне  Instructor
       (Проверка) или Watches (Просмотр)), такой тип выражений использо-
       вать нельзя.
           Extra input after expression
            (Лишние данные после выражения)
            Вы ввели допустимое выражение, но после него содержится лиш-
       ний текст.  Иногда это показывает, что в выражении пропущена опе-
       рация.
            Например, введено:
               3 * 4 + 5 2
       а нужно ввести:
               3 * 4 + 5 / 2
       или
               add     ax,4 5
       а нужно записать:

       TDeb 3.0 #3-3               = 171 =
               add     ax,45
           Help file ___ not found
            (Не найден справочный файл)
            Вы запросили вывод справочной информации, но отладчик не мо-
       жет найти на диске файл,  ее содержащий. Убедитесь, что этот файл
       находится в том же каталоге, что и программа отладчика.
           Illegal procedure or function call
            (Недопустимая процедура или вызов функции)
            Вы пытаетесь вычислить функцию в то время,  когда не  можете
       этого сделать. Это может произойти в следующих случаях:
            - вы пытаетесь вызвать функцию,  которая находится в оверлее
              Паскаля;
            - вы пытаетесь вызвать функцию, в то время как текущий адрес
              программы находится в оверлее Паскаля;
            - вы  пытаетесь вызвать метод объектно-ориентированного Пас-

Выход за границы диапазона непосредственного


              каля, который удален эффективным компоновщиком Паскаля;
           Immediate operand out of range
            ( Выход за границы диапазона непосредственного операнда)
            Вы ввели инструкцию в байтовым операндом в сочетании  с  не-
       посредственным операндом, превышающим байт.
            Например:
               add BYTE PTR[bx],300
            Следует записать:
               add     WORD PTR[bx],300
           Initialization not complete
            (Инициализация не завершена)
            В программе  вы  пытаетесь  обратиться к переменной до того,
       как сегмент данных будет соответствующим образом  настроен  кодом
       инициализации компилятора. Вы должны обеспечить выполнение до на-
       чала исходного кода программы кода инициализации  компилятора,  и
       только после этого можно обращаться к большинству переменных.
           Invalid argument list
            (Недопустимый список аргументов)
            Введенное вами  выражение содержит вызов процедуры или функ-
       ции,  в котором не сформирован должным образом список аргументов.
       Список аргументов начинается с левой скобки, содержит 0 или более

       TDeb 3.0 #3-3               = 172 =
       разделенных запятыми выражений,  и заканчивается правой  скобкой.
       Заметим,  что  при вызове процедуры или функции Турбо Паскаля без
       параметров нужно указывать пустые скобки. Например:
            myfunc(1,2 3)
       а нужно
            myfunc(1,2,3)
       или
            myfunc()
           Invalid character constant
            (Недопустимая символьная константа)
            Введенное вами выражение содержит неправильно сформированную
       символьную константу. Символьная константа содержит одинарную ка-
       вычку  (')  за которой следует один символ,  и завершается другой
       одинарной кавычкой. Например:
            'A = 'a'
       а нужно
            'A' = 'a'
           Invalid format string
            (Неверная строка формата)

После выражения вы ввели строку


             После выражения вы ввели строку формата,  но задали неверную
       строку. Более подробно об этом рассказывается в Главе 9.
           Invalid function parameter(s)
            (Недопустимый параметр функции)
            Вы пытаетесь вызвать в выражении функцию,  но не указали при
       вызове функции нужных параметров.
           Invalid instruction
            (Недопустимая инструкция)
            Вы ввели  для ассемблирования инструкцию с допустимой мнемо-
       никой, но недопустимым операндом. Инструкция состоит из мнемоники
       инструкции, за которой следуют необязательные аргументы,  но ука-
       занные аргументы недопустимы. Обычно подобное сообщение выводится
       при попытке ассемблировать инструкцию POP CS.
           Invalid instruction mnemonic
            (Недопустимая мнемоника инструкции)
            Вы ввели  для ассемблирования инструкцию с недопустимой мне-
       моникой.  Инструкция состоит из мнемоники инструкции,  за которой

       TDeb 3.0 #3-3               = 173 =
       следуют необязательные аргументы, например:
               AX,123
       следует записать:
               mov AX,123
           Invalid number entered
            (Введен недопустимый номер)
            В окне File или Module вы ввели недопустимый номер для пере-
       хода (с помощью команды Goto).  Число должно иметь допустимый де-
       сятичный формат и быть больше нуля.
           Invalid operand(s)
            (Недопустимые операнды)
            Инструкция, которую вы  пытаетесь  ассемблировать,  содержит
       один или более недопустимых операндов. Например, в инструкции MOV
       не допускается указывать два операнда со ссылкой на память, в не-
       которые инструкции работают только с операндами размером в слово.
           Invalid operator/data combination
            (Недопустимое сочетание операция/данные)
            Вы ввели выражение, в котором в операции указан операнд, над
       которым нельзя выполнить данную операцию.  Например, делается по-

пытка умножить константу на адрес


       пытка умножить константу на адрес функции в вашей программе.
           Invalid pass count entered
            (Введен недопустимый счетчик проходов)
            Вы ввели для точки останова счетчик проходов, который не на-
       ходится в диапазоне от 1 до 65535.  Значение  счетчика  не  может
       быть  равно  0.  Если  при выполнении программы значение счетчика
       равно 1, то данная точка останова сработает при ее первом обнару-
       жении.
           Invalid register
            (Недопустимый регистр)
            В ассемблируемой  инструкции вы указали недопустимый регистр
       с плавающей точкой.  Регистр с плавающей точкой состоит из  букв,
       за  которыми  следует  необязательное  число  от 0 до 7 в круглых
       скобках, например ST, ST(4).
           Invalid register combination in address expression
            (Недопустимое сочетание регистров в адресном выражении)
            При вводе инструкции для ассемблирования вы указали операнд,
       который не содержит одно из допустимых сочетаний базового  и  ин-
       дексного регистра. Адресное выражение может содержать базовый ре-

       TDeb 3.0 #3-3               = 174 =
       гистр,  индексный регистр,  или и тот,  и другой.  Базовыми могут
       быть регистры BX и BP, а индексными - SI и DI. Допускаются следу-
       ющие их сочетания:
                    BX      BX+SI
                    BP      BP+SI
                    DI      BX+DI
                    SI      BP+DI
           Invalid register in address expression
            (Недопустимый регистр в адресном выражении)
            Вы ввели для ассемблирования инструкцию,  в которой в адрес-
       ном  выражении в квадратных скобках используется недопустимый ре-
       гистр.  В адресных выражениях можно использовать только  регистры
       BX, BP, SI и DI.
           Invalid symbol in operand
            (Недопустимый символ в операнде)
            При вводе инструкции для ассемблирования вы начали операнд с

с которого он не может


       символа, с которого он не может начинаться (например, :).
           Invalid type cast
            (Недопустимое приведение типа)
            Вы ввели выражение, которое содержит некорректно формируемое
       приведение типа. Корректное назначение типа в языке Си начинается
       с левой (открывающей) скобки,  содержит возможно сложные данные с
       описанием  типа  (включая  имя переменной) и заканчивается правой
       (закрывающей) скобкой. Например:
               (x *)p
       а следует записать:
               (struct x *)p
            Корректное назначение типа в Паскале начинается с известного
       типа данных, затем левой скобки, выражения, и правой скобки. Нап-
       ример:
                Longint(p)
       или
                Word(p^)
           Invalid value entered
            (Введено недопустимое выражение)
            (Только для Си и Ассемблера.) Введенное  вами  выражение  на
       зыке  Си содержит ключевое слово там,  где ожидается имя перемен-
       ной.  Ключевые слова можно использовать только как часть операций
       приведения типа (за исключением специальной операции sizeof).

       TDeb 3.0 #3-3               = 175 =
            Например:
               floatval = char charval
       а следует записать:
               floatval = (char)charval
           Keyword not a symbol
            (Это ключевое слово, а не идентификатор)
            (Только для  Си  и Ассемблера.) Введенное выражение языка Си
       содержит ключевое слово там, где требуется указывать имя перемен-
       ной.  Ключевые слова допускается указывать только в операции при-
       ведения типа,  за исключением специальной операции sizeof. Напри-
       мер:
               floatval = char charval
       а следует записать:
               floatval = (char)charval
           Left side not a record, structure or union
            (Левая часть не является записью, структурой или объединени-
            ем)
            Вы ввели выражение,  содержащее один  из  селекторов  выбора

Однако перед этим идентификатором  не 


       элемента структуры на Си (.  или ->) или квалификатор поля записи
       Паскаля (.).  Однако перед этим идентификатором  не  указано  имя
       структуры  или  записи и не содержится указатель на структуру или
       запись.
           No coprocessor or emulator installed
            (Сопроцессор или эмулятор не установлены)
            Вы пытаетесь  с  помощью команды основного меню View¦Numeric
       Processor (Обзор¦Арифметический сопроцессор) открыть окно Numeric
       processor (Арифметический сопроцессор),  но плата арифметического
       сопроцессора в вашей системе не установлена, а отлаживаемая прог-
       рамма не использует программный эмулятор.
           No hardware debugging avaliable
            (Средства аппаратной отладки недоступны)
            Вы пытаетесь установить точку останова, для которой требует-
       ся аппаратная поддержка, но драйвер устройства для аппаратной от-
       ладки не установлен (либо драйвер не может найти необходимые  ап-
       паратные средства).
           No help for this context
            (Для этого контекста справочной информации нет)

       TDeb 3.0 #3-3               = 176 =
            Вы нажали клавишу F1 для получения справочной информации, но
       Турбо  отладчик  не может найти соответствующий справочный экран.
       Сообщите об этом, пожалуйста, фирме Borland.
           No modules with line number information
            (Нет модулей с информацией о номерах строк)
            Вы использовали команду View¦Module (Обзор¦Модуль), но Турбо
       отладчик  не может найти модули с достаточной информацией для от-
       ладки,  чтобы вы могли просматривать исходные модули.  Обычно это
       сообщение выводится при отладке программы,  не содержащей таблицы
       идентификаторов. См. сообщение "Рrogram has no symbol tables".
           No previous search expression
            (Нет предыдущего выражения для поиска)
            Вы пытаетесь выполнить из локального меню области текста ко-

но перед этим вы не


       манду Next (Следующий), но перед этим вы не давали команду Search
       (Поиск) для задания того, что вы ищете. Команду Next можно давать
       только после команды Search.
           No program loaded
            (Программа не загружена)
            Вы пытаетесь ввести команду, для выполнения которой требует-
       ся, чтобы программа была загружена. Таких команд много. Например,
       ни  одна из команд меню Run (Выполнение) не может выполняться без
       загрузки программы.  Для загрузки программы  используйте  команду
       File¦Open (Файл¦Открыть).
           No source file for module___
            (Нет исходных файлов для модуля)
            Для модуля,  который вы хотите просмотреть, невозможно найти
       исходный файл. Если исходный файл не содержится в текущем катало-
       ге, используйте команду Options¦Code Directories (Параметры¦Ката-
       логи исходного кода),  чтобы задать,  в каком каталоге  находятся
       ваши исходные файлы.
           No type information for this symbol
            (Для этого идентификатора нет информации о типе)
            Вы ввели выражение, содержащее имя переменной программы, для
       которой нет соответствующей отладочной информации. Это может про-
       изойти, когда переменная находится в модуле, скомпилированном без
       корректной отладочной информации.  Чтобы указать тип  данных,  вы
       можете  задать  информацию  о типе перед именем переменной (с по-
       мощью выражения назначения типа).
           Not a function name
            (Не является именем функции)

       TDeb 3.0 #3-3               = 177 =
            Вы ввели выражение,  которое содержит вызов функции,  но имя
       перед  круглой  скобкой  не  является именем функции (каждый раз,
       когда за именем открывается круглая скобка,  подразумевается, что
       это имя функции).
           Not a record, structure, or union member
            (Не является элементом записи, структуры или объединения)

элемента структуры на языке Си


            Вы ввели  выражение,  содержащее  один  из селекторов выбора
       элемента структуры на языке Си (.  или ->) или квалификатор  поля
       записи Паскаля (.).  Однако перед этим идентификатором не указано
       имя структуры или записи и не содержится указатель  на  структуру
       или запись.
           Not enough memory for selected operation
            (Для выбранной операции не хватает памяти)
            Вы дали команду, для которой требуется создание окна, но для
       этого не хватает памяти. Нужно сначала удалить или уменьшить раз-
       мер некоторых окон.
           Not enogh memory to load program
            (Не хватает памяти для загрузки программы)
            Таблица идентификаторов программы загружена в память, но для
       загрузки самой программы памяти не хватает. Если в системе имеет-
       ся память EMS, убедитесь, что отладчик использует ее для загрузки
       таблицы идентификаторов. Для этого используйте параметр командной
       строки -se или программу TDINST.
            Если у вас нет памяти EMS, или ваша программа не загружается
       даже с EMS,  вы можете соединить две вычислительных системы и ис-
       пользовать средства удаленной отладки (см.  Главу 15,  Главу 16 и
       Приложение E).
           Not enough memory to load symbol table
            (Не хватает памяти для загрузки таблицы идентификаторов)
            Не хватает памяти для загрузки таблицы идентификаторов прог-
       раммы.  Эта  таблица содержит информацию,  которую Турбо отладчик
       использует для вывода исходного кода и переменных программы. Если
       у  вас в системе работают резидентные программы,  требующие много
       памяти,  вы можете удалить их из памяти и перезапустить отладчик.
       Можно  также попробовать уменьшить объем таблицы идентификаторов,
       указав компилятору,  что нужно генерировать отладочную информацию
       только для тех модулей, которые вы будете отлаживать. Если вы ис-

пользуете TD386, попробуйте использовать параметр


       пользуете TD386, попробуйте использовать параметр -f, чтобы выну-
       дить TD эмулировать дополнительную память. См. Главу 15.
            При получении вами данного сообщения программа не будет заг-
       ружена в память. Это означает, что вы должны освободить достаточ-
       но памяти для таблицы идентификаторов и вашей программы.  Если вы
       отлаживаете резидентную программу,  которая уже загружена,  нужно

       TDeb 3.0 #3-3               = 178 =
       запустить Турбо отладчик с параметром командной строки -sm, чтобы
       зарезервировать память для таблицы идентификаторов.
           Only one operand size allowed
            (Допускается только один указатель размера операнда)
            Вы ввели для ассемблирования инструкцию, в которой содержит-
       ся более одного указателя размера.  Задав размер операнда,  вы не
       можете его изменить, например:
              mov WORD PTR BYTE PTR [bx],1
       cледует записать:
              mov BYTE PRT [bx],1
           Operand must be memory location
            (Операнд должен быть ячейкой в памяти)
            Вы ввели выражение,  содержащее подвыражение, которое должно
       ссылаться на ячейку памяти,  но не делает этого. Ссылка на память
       должны  присутствовать в операциях присваивания (=,  += и т.д.) и
       операциях уменьшения и увеличения (++ и --).
           Operand size unknown
            (Размер операнда неизвестен)
            Вы ввели для ассемблирования инструкцию, но не задали размер
       операнда.  Некоторые  инструкции  могут работать только с байтами
       или словами и требуют от вас задания размера (когда размер нельзя
       определить по виду операндов). Например, вместо:
              add [bx],1
       следует записать:
              add BYTE PTR [bx],1
           Overlay not loaded
            (Оверлей не загружен)
            (Только для Паскаля.) Вы пытаетесь установить область в окне
       CPU (ЦП) на адрес  в  программе,  который  соответствует  участку

Вы ввели несуществующее  сочетание  дисковода 


       программы, не загруженному в данным момент в память. Для проверки
       кода,  не загруженного в память,  можно использовать окно  Module
       (Модуль), но соответствующие инструкции просматривать нельзя.
           Path not found
            (Маршрут не найден)
            Вы ввели несуществующее  сочетание  дисковода  и  каталогов.
       Проверьте, задали  ли  вы правильную метку диска,  и корректно ли
       указаны имена каталогов.

       TDeb 3.0 #3-3               = 179 =
           Path or file not found
            (Маршрут или файл не найден)
            При ответе  на  подсказку для ввода имени файла для загрузки
       вы задали несуществующий файл или недопустимый маршрут.  Если  вы
       не знаете точного имени файла,  который требуется загрузить,  его
       можно выбрать из списка,  нажав  в  ответ  на  подсказку  клавишу
       Enter.  Имена в списке, которые заканчиваются обратной косой чер-
       той (\) - это каталоги,  позволяющие вам перемещаться  по  дереву
       каталогов.
           Program has no object or classes
            (Программа не содержит объектов или классов)
            Вы пытаетесь открыть  окно  View¦Hierarchy  (Обзор¦Иерархия)
       для необъектно-ориентированной программы.
           Program has no symbol table
            (Программа не содержит таблицу идентификаторов)
            Программа, которую  вы хотите отладить,  успешно загружена в
       память,  но не содержит никакой информации об идентификаторах для
       отладки.  Вы  сможете выполнять программу по шагам с помощью окна
       ЦП и просматривать непосредственные данные,  но не  сможете  ссы-
       латься на код или данные по имени.
            Для создания таблицы  идентификаторов  в  Паскале  (5.0  или
       старше) установите  параметр  Debug¦Standalone  Debugging (Отлад-
       ка¦Автономная отладка) или используйте параметр  командной строки
       /v при работе с TPC.EXE. При работе с Borland C или C++ нужно вы-

Турбо Ассемблером нужно выполнять  ассемблирование 


       полнять компиляцию с параметром /v   и компоновку (TLINK) с пара-
       метром /v,  чтобы  получить информацию для отладки.  При работе с
       Турбо Ассемблером нужно выполнять  ассемблирование  с  параметром
       /zi,  а для для компоновки программу нужно использовать компонов-
       щик TLINK и указывать для получения информации для отладки  пара-
       метр /v.
           Program linked with wrong linker version
            (Для компоновки программы использована неверная версия  ком-
            поновщика)
            Вы пытаетесь отладить программу с  отладочной  информации  в
       устаревшем  формате.  Перекомпонуйте  программу  с использованием
       последней версии компоновщика или скомпилируйте ее с помощью пос-
       ледней версии Турбо Паскаля.
           Program not found
            (Программа не найдена)
            Программа с заданным вами именем не существует. Укажите пра-
       вильное имя программы или выберите его из списка

       TDeb 3.0 #3-3               = 180 =
           Register cannot be used with this operator
            (Регистр не  может использоваться в данной операции)
            Вы ввели  инструкцию Ассемблера,  в которой делается попытка
       использовать базовый или  индексный  регистр,  как  отрицательное
       смещение. Базовый или индексный регистр можно использовать только
       как положительное смещение. Например:
               INC     WORD PTR[12-BX]
       недопустимо, правильным будет выражение:
               INC     WORD PTR[12+BX]
           Register or displacement expected
            (Требуется регистр или смещение)
            Вы ввели  для ассемблирования инструкцию,  в которой неверно
       сформировано выражение в квадратных скобках. В скобках для форми-
       рования  базово-индексного  операнда  можно помещать только имена
       регистров или значения смещений (константы).
           Run out of space for reystroke macros
            (Исчерпана область для клавиатурных макрокоманд)

При записи  макрокоманды  исчерпано  имеющееся


            При записи  макрокоманды  исчерпано  имеющееся пространство.
       Для всех клавиатурных макрокоманд можно записать до  256  нажатий
       клавиш.
           Search expression not found
            (Выражение для поиска не найдено)
            Невозможно найти текст или байты,  которые вы задали.  Поиск
       начинается с текущего места в файле (которое определяется позици-
       ей курсора) и продолжается по направлению к концу файла.  Если вы
       хотите выполнить поиск по всему файлу,  перед выполнением следую-
       щей команды нажмите клавиши Ctrl-PgUp.
           Source file ___ not found
            (Исходный файл не найден)
            Турбо отладчик не может найти исходный файл для модуля,  ко-
       торый вы хотите проверить.  Перед тем,  как вывести такое сообще-
       ние, он ищет исходные файлы в следующих местах:
            - там, где их ищет компилятор;
            - в каталогах,  заданных с  помощью  параметра  командной
              строки -sd и команды Options¦Path for Source (Параметры
              ¦Маршрут поиска исходных файлов);
            - в текущем каталоге;

       TDeb 3.0 #3-3               = 181 =
            - в каталоге,  где Турбо отладчик находит отлаживаемую прог-
              рамму.
            Вы должны  с  помощью команды Options¦Path for Source (Пара-
       метры¦Маршрут поиска исходных файлов) добавить  к  списку  поиска
       каталоги, содержащие исходный файл.
           Symbol not found
            (Не найден идентификатор)
            Вы ввели выражение,  содержащее недопустимое имя переменной.
       Возможно допущена ошибка при вводе имени переменной, или вы нахо-
       дитесь вне активной процедуры (функции),  либо в другом модуле за
       пределами области действия.
           Symbol table not found
            (Не найдена таблица идентификаторов)
            Заданный вами файл таблицы идентификаторов не существует. Вы
       можете задавать файлы с расширениями .TDS или .EXE.

в неверном формате. Если не


           Syntax error
            (Синтаксическая ошибка)
            Вы ввели выражение в неверном формате. Если не выводится бо-
       лее конкретное сообщение, то это общее сообщение об ошибке.
           Too many files match wildcard mask
            (С трафаретной маской совпадает слишком много файлов)
            Вы задали трафаретную маску, которой соответствуют более 100
       файлов. На экран можно вывести только первые 100 файлов.
           Type EXIT to return to Turbo Debugger
            (Для возвращения в Турбо отладчик наберите EXIT)
            Вы дали  команду  File¦DOS Shell  (Файл¦Командный  процессор
       DOS). Данное сообщение указывает вам, что после выполнения команд
       DOS для возвращения в отладчик и продолжения  сеанса  отладки  вы
       можете ввести команду EXIT.
           Unexpected end of line
            (Непредвиденный конец строке)
            При вычислении выражения до того, как было распознано допус-
       тимое выражение, обнаружен конец строки.
            Например:
            99 - 22 *
       а следует записать:

       TDeb 3.0 #3-3               = 182 =
            99 - 22 * 4
            Следующий пример:
            SUB AX,
       следует записать в виде:
            SUB AX,4
           Unknown character
            (Неизвестный символ)
            Вы ввели выражение,  содержащее символ, который не может ис-
       пользоваться в выражениях (например,  символ кавычки (') в  языке
       Си).
           Unknown record, union or structure name
            (Неизвестное имя записи, объединения или структуры)
            Вы ввели выражение, которое содержит приведение типа с неиз-
       вестной записью,  структурой, союзом или перечислимым типом. (За-
       метим,  что в Си и Ассемблере структуры имеют собственные  имена,
       отличные от переменных).
           Unknown symbol
            (Неизвестный идентификатор)
            Вы ввели выражение,  содержащее недопустимое  имя  локальной

Либо неверно имя модуля, либо


       переменной.  Либо неверно имя модуля, либо имя локального иденти-
       фикатора, либо некорректен номер строки.
           Unterminated string
            (Незавершенная строка)
            Вы ввели строку, которая не завершается закрывающей кавычкой
       (двойной - в Си,  или одинарной в Паскале). Если в Паскале вы хо-
       тите ввести строку,  внутри которой содержится символ кавычки, то
       нужно указывать дополнительный символ кавычки (').  В языке Си  в
       этом случае перед ней нужно указывать обратную косую черту (\).
           Value must be between nn and nn
            (Значение должно быть от nn до nn)
            Вы ввели недопустимое числовое значение для параметра редак-
       тора (например,  размера табуляции) или принтера (например, число
       строк на странице).  В сообщении об ошибке указывается допустимый
       диапазон.
           Value out of range
            (Значение вне диапазона)
            Вы ввели значение переменной Паскаля,  которое находится вне

       TDeb 3.0 #3-3               = 183 =
       диапазона допустимых значений.
           Video mode not avaliable
            (Видеорежим не доступен)
            Вы пытаетесь переключиться в режим 43/50 строк, но ваш дисп-
       лейный  адаптер  не  поддерживает  такого режима (указанный режим
       можно использовать только на адаптерах EGA и VGA).
           Video mode swithed while flipping pages
            (Во время переключения страниц изменен видеорежим)
            Ваша программа изменила видеорежим,  в то время как отладчик
       находился в режиме переключения страниц. Это означает, что содер-
       жимое экрана вашей программы потеряно.  Этого можно избежать, за-
       дав в командной строке параметр -ds, определяющий режим  видеооб-
       мена.
           You are not debugging a Window program
            (Вы отлаживаете не программу Windows)
            Вы пытаетесь  выполнить  операцию,  которую  можно выполнить

Перед выводом на экран обычной


       только для программы  Windows  (например,  View¦Windows  Messages
       (Просмотр¦Сообщения Wiondows)), но программа загружена, как прог-
       рамма DOS.

       TDeb 3.0 #3-3               = 184 =
                          Информационные сообщения
       -----------------------------------------------------------------
            Перед выводом на экран обычной системы окон  Турбо  отладчик
       генерирует некоторые информационные сообщения. Приведем их описа-
       ние.
           Waiting for handshake from TDREMOTE (Ctrl-Break to quit)
            (Ожидается установление связи с утилитой TDREMOTE, для выхо-
            да нажмите клавиши Ctrl-Break)
            Вы указали Турбо отладчику,  что хотите выполнить отладку на
       удаленной системе,  подсоединенной через  последовательный  порт.
       Теперь  Турбо  отладчик  ждет  уведомления о запуске от удаленной
       системы.
            Нажав клавиши Ctrl-Break,  вы можете прервать Турбо отладчик
       и вернуться в DOS.

       TDeb 3.0 #2-3                 = 1 =
     Глава 9. Выражения................................................6
       Выбор языка для вычисления выражения............................6
       Адреса кода, адреса данных и номера строк.......................7
       Доступ к идентификаторам вне текущей области действия...........7
       Синтаксис переопределения области действия......................9
       Переопределение области.........................................9
       Некоторые замечания по переопределению области действия........12
       Переопределение области действия в программах Паскаля..........12
       Некоторые замечания по переопределению области действия........14
       Область действия и DLL.........................................15
       Неявная область действия при вычислении выражений..............16
       Списки байт....................................................16
       Выражения языка Си.............................................17

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


       Идентификаторы языка Си........................................17
       Регистровые псевдопеременные языка Си..........................18
       Форматы констант и чисел языка Си..............................19
       Символьные строки и ESC-последовательности языка Си............20
       Операции языка Си и старшинство операций.......................20
       Выполнение в программе функций на Си...........................21
       Выражения языка Си с побочными эффектами.......................22
       Ключевые слова языка Си и преобразование типов.................22
       Выражения языка Паскаль........................................23
       Идентификаторы Паскаля.........................................23
       Константы Паскаля и формат чисел...............................23
       Строки Паскаля.................................................24
       Операции Паскаля...............................................25
       Соглашения Паскаля по вызовам процедур и функций...............25
       Выражения Ассемблера...........................................26
       Идентификаторы Ассемблера......................................26
       Константы Ассемблера...........................................26
       Операции Ассемблера............................................28
       Управление форматом............................................28
     Глава 10. Объектно-ориентированная отладка для Паскаля и
        C++...........................................................30
       Отладка объектно-ориентированных программ Турбо Паскаля........30
       Окно Hierarchy.................................................31
       Области списка типов объектов и классов........................31
       Локальное меню области области списка типов объектов и
        классов.......................................................32
       Команда Inspect................................................32
       Команда Tree...................................................32

Локальное меню области дерева порождающих


       Область дерева иерархии........................................33
       Локальные меню области дерева иерархии.........................33
       Локальное меню области дерева порождающих классов..............34
       Окно Object Type/Class Inspector...............................35
       Локальное меню окна Object Type/Class Inspector................36
       Область полей данных объекта (верхняя).........................36
       Область методов объекта (нижняя)...............................37
       Окно Object/Class Instance Inspector...........................38
       Локальное меню окна Object/Class Instance Inspector............39
       Средняя и нижняя область.......................................41
     Глава 11. Отладка на уровне Ассемблера...........................42
       Когда недостаточно отладки на уровне исходного кода............42

       TDeb 3.0 #2-3                 = 2 =
       Окно CPU.......................................................43
       Область кода...................................................45
       Дисассемблер...................................................45
       Локальное меню области кода....................................47
       Команда Goto...................................................47
       Команда Origin.................................................47
       Команда Follow.................................................47
       Команда Caller.................................................48
       Команда Previous...............................................48
       Команда Search.................................................48
       Команда View Source............................................49
       Команда Mixed..................................................49
       Команда New CS:IP..............................................50
       Команда Assemble...............................................50
       Команда I/O....................................................50

Сопроцессор 80х87


       Команда In Byte................................................50
       Команда Out Byte...............................................51
       Команда Read Word..............................................51
       Команда Write Word.............................................51
       Область регистров и флагов.....................................52
       Локальное меню области регистров...............................52
       Область селектора..............................................55
       Область данных.................................................57
       Локальное меню области данных..................................58
       Область стека..................................................63
       Ассемблер......................................................65
       Переопределения размера адреса операнда........................65
       Память и непосредственные операнды.............................65
       Переопределение размера данных в операндах.....................66
       Строковые инструкции...........................................67
       Окно Dump......................................................67
       Окно Registers.................................................68
     Глава 12. Сопроцессор 80х87 и эмулятор...........................69
       Сопроцессор 80х87 или эмулятор?................................69
       Окно Numeric Processor.........................................69
       Область регистров..............................................71
       Локальное меню области регистров...............................71
       Область управления.............................................73
       Локальное меню области управления..............................73
       Область состояния..............................................74
       Локальное меню области состояния...............................74
     Глава 13. Команды Турбо отладчика................................75
       Оперативные клавиши............................................75

Локальное меню окна Breakpoints


       Команды, доступные из основного меню...........................80
       Меню Ё (системное меню)........................................80
       Меню File (Файл)...............................................81
       Меню Edit (Редактирование).....................................82
       Меню View (Обзор)..............................................82
       Меню Run (Выполнение)..........................................84
       Меню Breakpoints (Точки останова)..............................86
       Меню Data (Данные).............................................86
       Меню Options (Параметры).......................................86
       Меню Window (Окно).............................................88

       TDeb 3.0 #2-3                 = 3 =
       Меню Help (Справка)............................................89
       Команды локальных меню.........................................90
       Локальное меню окна Breakpoints (Точки останова)...............90
       Меню окна CPU (ЦП).............................................92
       Область кода...................................................92
       Область селектора..............................................93
       Область данных.................................................94
       Область флагов.................................................95
       Область стека..................................................97
       Окно Dump (Дамп)...............................................98
       Меню окна Execution History....................................98
       Область инструкций.............................................98
       Область регистрации нажатий клавиш.............................99
       Окно File (Файл)...............................................99
       Локальное меню окна Log (Регистрация).........................100
       Окно Module (Модуль)..........................................102
       Окно Windows Messages.........................................103

Трафаретные символы, используемые при


       Область выбора окна...........................................104
       Область класса сообщений......................................105
       Область сообщений.............................................105
       Окно Clipboard................................................106
       Окно Numeric Proseccor (Сопроцессор)..........................106
       Область регистров.............................................107
       Область состояния.............................................107
       Область управления............................................107
       Окно Hierarchy (Иерархия).....................................107
       Область списка типов объектов/классов.........................108
       Область дерева иерархии.......................................109
       Область дерева порождающих объектов/классов...................109
       Меню окна Registers (Регистры)................................109
       Окно Stack (Стек).............................................110
       Окно Variables (Переменные)...................................110
       Область локальных идентификаторов.............................110
       Окно Watches (Просмотр).......................................112
       Окно Inspector (Проверка).....................................113
       Окно проверки типа объекта/класса.............................113
       Окно проверки экземпляра объекта..............................115
       Области текста................................................115
       Области списков...............................................117
       Команды в окнах подсказки.....................................118
       Клавиатурные команды диалогового окна      Таблица 13.4.......118
       Команды перемещения окна......................................119
       Трафаретные символы, используемые при поиске..................119
       Полное дерево меню............................................120
     Глава 14.

Не следует путать старшинство


Отладка программы.....................................122
       Когда что-то не работает......................................122
       Стиль отладки.................................................123
       Полное выполнение.............................................123
       Последовательное тестирование.................................123
       Типы ошибок...................................................124
       Общие ошибки..................................................124
       Скрытые эффекты...............................................124
       Предположения об инициализации данных.........................124

       TDeb 3.0 #2-3                 = 4 =
       Не забывайте об очистке.......................................125
       "Забор и столбы"..............................................125
       Ошибки, специфические для языка Си............................125
       Использование неинициализированных локальных переменных.......126
       Не следует путать = и ==......................................126
       Не следует путать старшинство операций........................127
       Неверные арифметические действия с указателями................127
       Не забывайте о расширении по знаку............................127
       Помните об усечении...........................................129
       Использование точки с запятой.................................129
       Макрокоманды с побочными эффектами............................129
       Повторение имен локальных динамических переменных.............129
       Неправильное использование динамических локальных
        переменных...................................................130
       Функция возвращает неопределенное значение....................130
       Неправильное использование ключевого слова break..............131
       Код, не приводящий к результату...............................131
       Ошибки, специфические для Паскаля.............................132

о стеке или резервирует маленький


       Инициализированные переменные.................................132
       Неправильная работа с указателями.............................132
       Неправильное использование области действия...................133
       Неправильное использование точки с запятой....................134
       Функция возвращает неопределенное значение....................135
       Уменьшение значения переменных размером в байт или слово......136
       Игнорирование границ и особые случаи..........................136
       Ошибки диапазона..............................................137
       Ошибки, специфические для Ассемблера..........................138
       Программист забывает о возврате в DOS.........................138
       Программист забывает об инструкции RET........................139
       Генерация неверного типа возврата.............................139
       Неправильный порядок операндов................................139
       Программист забывает о стеке или резервирует маленький стек...139
       Вызов подпрограммы, которая портит содержимое нужных
        регистров....................................................140
       Ошибки при использовании условных переходов...................140
       Неверное понимание работы префикса REP........................140
       Нулевое содержимое CX и работа с целым сегментом..............140
       Неправильная установка флага направления......................141
       Ошибки при повторении команд сравнения строк..................141
       Ошибки при назначении сегмента строк..........................141
       Неправильное преобразование из байта в слово..................141
       Использование нескольких префиксов............................142
       Необязательные операнды в командах обработки строк............142
       Уничтожение содержимого регистра при умножении................142
       Ошибки, связанные с изменением содержимого регистров..........143
       Изменение состояния флага переноса............................143

Сохранение содержимого регистров при обработке


       Программист долго не использует флаги.........................143
       Смешение операндов в памяти и непосредственных операндов......143
       Ошибки, связанные с возвратом в начало сегмента...............143
       Сохранение содержимого регистров при обработке прерываний.....144
       Игнорирование групп в таблицах операндов и данных.............144
       Проверка......................................................145
       Проверка граничных условий и случаи ограничения...............145

       TDeb 3.0 #2-3                 = 5 =
       Ввод ошибочных данных.........................................145
       Отсутствие входных данных.....................................145
       Отладка, как часть процесса создание программы................145
       Пример сеанса отладки.........................................147
       Сеанс отладки программы на языке Си...........................147
       Поиск ошибок..................................................147
       Разработка плана действий.....................................148
       Запуск Турбо отладчика........................................148
       Проверка......................................................149
       Окно Watch....................................................151
       Диалоговое окно Evaluate/Modify...............................151
       Эврика!.......................................................151
       Сеанс отладки с использованием программы на Паскале...........153
       Поиск ошибок..................................................154
       Выбор стратегии поиска ошибок.................................155
       Запуск Турбо отладчика........................................155
       Перемещение по программе......................................157
       Диалоговое окно Evaluate/Modify...............................158
       Проверка......................................................158
       Выражения просмотра...........................................159

Аппаратные средства, необходимые для виртуальной


       Следующая ошибка..............................................160
     Глава 15. Виртуальная отладка с использованием процессора
        80386........................................................162
       Аппаратные средства, необходимые для виртуальной отладки......162
       Установка драйвера устройства для виртуального отладчика......162
       Запуск виртуального отладчика.................................163
       Отличия обычной и виртуальной отладки.........................166
       Замечания относительно возможных проблем......................166
       Сообщения об ошибках TD386....................................167
       Сообщения об ошибках TDH386.SYS...............................169
     Глава 16. Отладка в защищенном режиме с использованием
        TD386........................................................170
       Аппаратура, необходимая для использования отладчика TD286.....170
       Установка отладчика для защищенного режима....................170
       Запуск отладчика для защищенного режима.......................171
       Отличия Турбо отладчика и отладчика для защищенного режима....171
       Отладка программ, использующих дополнительную память..........171
       Выполнение TD286 на разных машинах............................171

       TDeb 3.0 #2-3                 = 6 =
                             Глава 9. Выражения
       -----------------------------------------------------------------
            Выражения могут  включать  в себя идентификаторы вашей прог-
       раммы (то есть имена переменных и подпрограмм), а также константы
       и  операции одного из поддерживаемых языков (Си,  Паскаля или Ас-
       семблера).
            Турбо отладчик может вычислять выражения и сообщать вам зна-
       чение  результата.  Выражения можно также использовать для ссылки
       на элементы данных в памяти,  значение которых вы хотите  узнать.
       Выражение  можно  вводить  в ответ на любую подсказку,  в которой

Для вычисления значения введенного выражения


       запрашивается значение адреса памяти.  (Заметим,  что в различных
       языках выражения вычисляются по-разному.)
            Для вычисления значения введенного выражения можно использо-
       вать команду основного меню Data¦Evaluate/Modify (Данные¦Вычисле-
       ние/Модификация). Эту команду можно также использовать, как прос-
       тейший калькулятор, а также для проверки значений объектов данных
       в программе.
            В данной  главе мы расскажем вам о том,  каким образом Турбо
       отладчик определяет, какой язык нужно использовать для вычисления
       выражения,  и как задать использование конкретного языка. Мы опи-
       шем элементы выражений,  которые являются общими для всех языков,
       такие, как номера исходных строк и доступ к регистрам процессора.
       Затем мы опишем компоненты,  которые входят в выражение на  любом
       языке,  включая константы,  переменные программы, строки и опера-
       ции.  Для каждого языка мы перечислим также поддерживаемые  Турбо
       отладчиком операции и опишем синтаксис выражений.
            Полное описание выражений Си,  Паскаля или Ассемблера содер-
       жится в руководствах пользователя и  справочных  руководствах  по
       соответствующим языкам. (см. Borland C++ Getting started, Borland
       C++ Programmers  Guide,  Turbo  Pascal Users Guide,  Turbo Pascal
       Reference Guide, Turbo Assembler Reference Guide).
                    Выбор языка для вычисления выражения
       -----------------------------------------------------------------
            Турбо отладчик обычно определяет, какой язык нужно использо-
       вать для вычисления выражения,  на основе расширения имени исход-
       ного файла в текущем модуле.  Это тот модуль, в котором останови-
       лась ваша программа.  Этот выбор можно отменить с помощью команды
       Options¦Language  (Параметры¦Язык)  и  открытия  диалогового окна
       Expression Language (Язык для выражений),  в котором вы можете  с

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


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

       TDeb 3.0 #2-3                 = 7 =
       нако, иногда полезно задать язык явным образом, например, если вы
       отлаживаете  вызываемый из других языков модуль Ассемблера.  Явно
       задав использование для вычисления выражений  конкретного  языка,
       вы  можете обращаться к данным так,  как это делается в соответс-
       твующем языке,  даже если в текущем  модуле  используется  другой
       язык.
            Иногда удобно интерпретировать выражение или переменную  та-
       ким образом,  как если бы оно было написано на другом языке. Нап-
       ример, при отладке программы Паскаля для изменения значения байта
       в строке удобнее использовать соглашения Си или Ассемблера.
            Если при запуске Турбо отладчика начальный выбор языка  кор-
       ректен, то  при использовании соглашений других языков трудностей
       не будет.  Турбо отладчик сохраняет информацию о исходном языке и
       выполняет соответствующее  преобразование  и запись данных.  Если
       язык не определен однозначно,  Турбо отладчик использует  Ассемб-
       лер.
            Даже если вы ошибочно зададите при входе  в  Турбо  отладчик
       неверный язык,  он все равно сможет получить некоторую информацию
       о языке на основе таблицы идентификаторов и исходного модуля. Од-
       нако при некоторых обстоятельствах это может привести к тому, что
       Турбо отладчик будет записывать данные некорректно.
                  Адреса кода, адреса данных и номера строк
       -----------------------------------------------------------------

вы просто вводите ее имя.


            Обычно, когда нужно получить доступ к переменной  или  имени
       подпрограммы в вашей программе,  вы просто вводите ее имя. Однако
       можно также вводить указатель, при вычислении которого получается
       указатель на память,  или задавать адреса кода в виде номеров ис-
       ходных  строк,  указывая перед номером строки символ #, например,
       #123 (только  для Си и C++).  В следующем разделе рассказывается,
       как можно обращаться к идентификаторам,  находящимся вне  текущей
       области действия.
            Конечно, с помощью обычного синтаксиса вида  "сегмент:смеще-
       ние" вы можете задать шестнадцатиричный адрес:
           ------------------------T----------------T---------------¬
           ¦ Язык                  ¦  Формат        ¦     Пример    ¦
           +-----------------------+----------------+---------------+
           ¦ Си                    ¦  Oxnnnn        ¦ Ox1234:Ox0010 ¦
           ¦ Паскаль               ¦  $nnnn         ¦ $1234:0010    ¦
           ¦ Ассемблер             ¦  nnnnh         ¦ 1234h:0B234h  ¦
           L-----------------------+----------------+----------------
            Доступ к идентификаторам вне текущей области действия
       -----------------------------------------------------------------
            Область, в которой Турбо отладчик ищет идентификатор,  назы-
       вается областью действия этого идентификатора. Доступ к идентифи-

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

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


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

       TDeb 3.0 #2-3                 = 9 =
                 Синтаксис переопределения области действия
       -----------------------------------------------------------------
            В зависимости  от  используемого языка,  для переопределения
       области  действия  идентификатора с  данным  именем  используются
       разные символы.
            - В  Си,  С++ и Турбо Ассемблере для переопределения области
              действия используется обычно символ #.
            - В Паскале с этой целью можно использовать точку (.).
            Выражение с уточненным идентификатором можно  вводить везде,
       где допустимо выражение, включая:
            - диалоговое окно Evaluate/Modify;
            - окно Watches;
            - диалоговое окно Data¦Inspector;

когда вы хотите перейти на


            - диалоговое  окно,  выводимое командой локального меню Goto
              или окно Module ( когда вы хотите перейти на адрес исходно-
              го кода).
                           Переопределение области
                  действия в программах Си, С++ и Ассемблера
       -----------------------------------------------------------------
            Для разделения компонентов области действия используйте сим-
       вол #.
            Таким образом, для переопределения области действия использу-
       ется следующий синтаксис (в квадратные скобки заключены  необяза-
       тельные элементы):
            [#модуль[#имя_файла]]#номер_строки[#номер_переменной]
       или
            [#модуль[#имя_файла]][#имя_функции]#имя_переменной
                 Примечание: Переопределение области действия  не  дейс-
            твуют для регистровых переменных.
            Если вы не задаете модуль,  то подразумевается  текущий  мо-
       дуль.
            Например, в окне Watches вы можете для  переменной программы
       TDDEMO nlines ввести разные номера строк,  чтобы увидеть, как из-
       меняется ее значение в различных подпрограммах.  Чтобы  наблюдать
       за значением  переменной  на строке 42 и 57,  можно ввести в окне
       Watches следующую запись:

       TDeb 3.0 #2-3                = 10 =
            #41#nlines
            #57#nlines
            Приведем некоторые примеры допустимых выражений для  иденти-
       фикаторов  с переопределением области действия (каждой допустимой
       комбинации элементов,  которые можно использовать для переопреде-
       ления области действия соответствует один пример).
             В первых  6 примерах показаны различные способы использова-
       ния номеров строк для генерации адресов и переопределения области
       действия:
               #123
               (Строка 123 в текущем модуле.)
               #123myvar1
               (Идентификатор myvar1 доступен из строки 123 текущего мо-

Идентификатор myvar1 доступен из  строки 


               дуля.)
               #mymodule#123
               (Строка 123 в модуле #mymodule.)
               #mymodule#123#myvar1
               ( Идентификатор myvar1 доступен из  строки  123  в  модуле
               mymodule.)
               #mymodule#file#123
               (Строка 123  в  исходном  файле  file,  который  является
               частью модуля mymodule.)
               #mymodule#file#123#myvar1
               (Идентификатор myvar1  доступен  из строки 123 в исходном
               файле file1, который является частью модуля mymodule.)
            Следующие 6  примеров показывают различные способы переопре-
       деления области действия переменной с использованием имени  моду-
       ля, файла или функции:
               #myvar2
               (То же, что и myvar2 без #.)
               #myfunc#myvar2
               (Переменная myvar2 доступна из подпрограммы myfunc.)

       TDeb 3.0 #2-3                = 11 =
               #mymodule#myvar2
               (Переменная myvar2 доступна из модуля mymodule.)
               #mymodule#myfunc#myvar2
               (Переменная myfunc доступна из подпрограммы myfunc в  мо-
               дуле mymodule.)
               #mymodule#file2#myvar2
               (Переменная myvar2  доступна из файла file2,  являющегося
               частью модуля mymodule.)
               #mymodule#file2#myfunc#myvar2
               (Переменная myvar2 доступна из подпрограммы myfunc, опре-
               деленной   в   файле   file2,  который  входит  в  модуль
               mymodule.)
            Следующие 4 примера показывают переопределения области дейс-
       твия для классов, объектов и функций-элементов С++:
            AnObject#AMemberVar
            Элемент данных AMemberVar доступен в объекте AnObject,  дос-
       тупном в текущей области действия.
            AnObject#AMemberF
            Функция-элемент AMemberF  доступна в объекте AnObject,  дос-
       тупном в текущей области действия.

Если при  отладке программы на


            #AModule#AnObject#AClass::AMemberVar
            Элемент данных AMemberVar в классе AClass доступен в объекте
       AnObject, доступном в модуле AModule.
            Если при  отладке программы на языке С++ вы хотите проверить
       функцию с переопределенным именем, то для этого в соответствующем
       поле  ввода просто введите имя функции.  Турбо отладчик открывает
       диалоговое окно Pick a Symbol Name (Выбор  имени  идентификатора)
       со  списком всех функций с данным именем вместе с их аргументами.
       Вы можете выбрать то, что вам нужно.

       TDeb 3.0 #2-3                = 12 =
           Некоторые замечания по переопределению области действия
       -----------------------------------------------------------------
            При переопределении  области действия в программах на языках
       Си, C++, Паскаль или Ассемблер вам могут помочь следующие замеча-
       ния:
            1. Если  вы используете имя файла с оператором переопределе-
               ния области действия,  то ему должно  предшествовать  имя
               модуля.
            2. Если имя файла имеет расширение (.ASM,  .C или .CPP),  то
               вы должны указать расширение. Турбо отладчик сам расшире-
               ние не распознает.
            3. Если первым элементом в операторе переопределения области
               действия является функция,  то перед ней не должен указы-
               ваться символ #. При наличии символа # Турбо отладчик ин-
               терпретирует имя функции как имя модуля.
            4. Любая переменная,  к которой вы обращаетесь с помощью пе-
               реопределения  области  действия, уже должна быть инициа-
               лизирована.
            5. Если вы пытаетесь получить доступ к динамической  локаль-
               ной  переменной,  лежащей вне области действия,  то в ка-
               честве части операторе переопределения  области  действия
               нужно использовать имя ее функции.

Область действия шаблона зависит от 


            6. Турбо  отладчик  поддерживает  шаблоны и вложенные классы
               C++.
               - Область действия шаблона зависит от  текущей  ячейки  в
                 программе. Окна Wathes и Inspector с выражениями шабло-
                 на зависят от текущего  объекта,  в  котором  находится
                 программа.
               - Вложенный класс находится в области действия того клас-
                 са,  в который он вложен.  Область действия  вложенного
                 класса не является для программы глобальной.
            Переопределение области действия в программах Паскаля
       -----------------------------------------------------------------
            Для разделения  компонентов  области  действия  используется
       точка (.).
            Для переопределения  области действия используется следующий
       синтаксис (в квадратные скобки заключены  необязательные  элемен-
       ты):
            [модуль.[имя_процедуры]имя_переменной

       TDeb 3.0 #2-3                = 13 =
       или
            [модуль.[объектный_тип.][реализация_объекта.][метод]имя_поля
            Если вы не задаете модуль,  то подразумевается  текущий  мо-
       дуль.
            Далее приведено несколько примеров, которые не включают объ-
       екты и методы.  Каждый пример соответствует одной допустимой ком-
       бинации элементов, которую вы можете использовать для переопреде-
       ления области действия.
            В следующих примерах показаны различные способы  переопреде-
       ления  области  действия  с помощью использования имени процедуры
       или модуля:
            AVar                          Переменная AVar доступна в те-
                                          кущей области действия.
            AProc.AVar                    Локальная переменная AVar про-
                                          цедуры AProc доступна в  теку-
                                          щей области действия.
            AUnit.AVar                    Локальная переменная AVar дос-

Ниже приводятся несколько примеров, включающих


                                          тупна в модуле AUnit.
            AUnit.AProc.AVar              Переменная   AVar  доступна  в
                                          процедуре AProc,   которая,  в
                                          свою очередь, доступна в моду-
                                          ле AUnit.
            Ниже приводятся несколько примеров, включающих объекты и ме-
       тоды:
        Instance                                   Реализация   Instance
                                                   доступна  в   текущей
                                                   области действия.
        Instance.AField                            Поле AFild доступно в
                                                   реализации  Instance,
                                                   доступной  в  текущей
                                                   области действия.
        AnObjectType.AMethod                       Метод AMethod  досту-
                                                   пен  в  типе  объекта
                                                   AnObjectType, доступ-
                                                   ном в текущей области
                                                   действия.
        AnInstance.AMethod                         Метод AMetod доступен
                                                   в          экземпляре
                                                   AnInstance, доступном

       TDeb 3.0 #2-3                = 14 =
                                                   в   текущей   области
                                                   действия.
        AUnit.AInstance.AFild                      Поле AFild доступно в
                                                   экземпляре AInstance,
                                                   который  доступен   в
                                                   модуле AUnit.
        AUnit.AnObjectType.AMethod                 Метод AMethod  досту-