Разрешение группы) или Disable Group
Чтобы добавить к точке останова набор действий, сделайте
следующее:
1. Выберите селективный переключатель Execute (Выполнение),
Enable Group ( Разрешение группы) или Disable Group (Зап-
рещение группы).
2. Выберите "кнопку" Add (Добавление), которая находится под
текстовым полем Action Expression.
3. Введите действие в текстовое поле Action Expression (Вы-
ражения действия).
Если вы хотите, чтобы при срабатывании точки останова вы-
полнялось несколько действий, повторите шаги 2 и 3, пока
все они не будут добавлены в текстовое поле Action
Expression.
4. Когда вы закончите вводить действия, выберите в диалого-
вом окне Conditions and Actions "кнопку" OK.
Если вы выбрали селективные переключатели Enable Group (Раз-
решение группы) или Disable Group (Запрещение группы), для указа-
ния группы, которую вы ходите разрешить или запретить, просто
введите в текстовое поле Action Expression номер группы.
"Кнопка" Delete (Удаление), которая находится под текстовым
TDeb 3.0 #1-3 = 187 =
полем Action Expression, позволяет вам удалить текущее условие из
набора условий.
Поле ввода Pass Count...
-----------------------------------------------------------------
Поле ввода Pass Count (Счетчик проходов) задает, сколько раз
данное действие должно быть обнаружено перед тем, как оно срабо-
тает. Значение счетчика уменьшается только в том случае, если со-
ответствующее точке останова условие принимает истинное значение.
Это означает, что если наряду с условием установили счетчик про-
ходов, то точка останова сработает, когда условие n-ый раз примет
истинное значение.
что вы можете останавливать свою
TDeb 3.0 #1-3 = 188 =
Настройка точек останова
-----------------------------------------------------------------
Кроме того, что вы можете останавливать свою программу в
конкретной точке, вы можете расширить возможности управления,
обусловив остановку программу выполняемым по точке останова дейс-
твием.
Простые точки останова
-----------------------------------------------------------------
При первоначальной установки точки останова она имеет назна-
чаемые по умолчанию параметры Always Break. После установки точки
останова выполняемые по ней действия и условия ее срабатывания
можно настроить. Точки останова можно задать несколькими способа-
ми, каждый из них удобно использовать в определенных обстоятель-
ствах.
1. Переместите курсор на нужную строку исходного кода (в ок-
не Module или в области кода окна CPU) и дайте команду
Breakpoints¦Toggle (Точки останова¦Переключение) или наж-
мите клавишу F2 (можно также щелкнуть кнопкой "мыши").
Если дать эту команду на строке, где уже имеется точка
останова, то эта точка останова будет удалена.
2. Дайте команду локального меню Add (Добавить) в области
списка точек останова окна Breakpoints и введите адрес
кода, по которому вы ходите задать точку останова. Адрес
кода имеет тот же формат, что и формат указателя исполь-
зуемого языка. Подробнее о выражениях рассказывается в
Главе 9.
3. Чтобы установить точку останова на текущей строке в окне
Module, дайте команду Breakpoints¦At (Точки останова¦По
адресу...).
Глобальные точки останова
-----------------------------------------------------------------
будет проверять точку останова на
Когда точка останова становится глобальной, Турбо отладчик
будет проверять точку останова на каждой строке исходного кода.
Если набор условий принимает истинное значение, то выполняется
соответствующее действие.
Примечание: Если вы хотите установить аппаратные точки
останова, проверьте переключатель Global.
Поскольку действие отладчика будет выполняться на каждой
строке исходного кода, глобальные точки останова существенно за-
медляют выполнение программы. Используйте глобальные точки оста-
нова осторожно. К ним следует прибегать только в том случае, если
вы хотите точно определить, когда переменная изменяет значение, и
когда становятся истинными некоторые условия, либо когда ваша
TDeb 3.0 #1-3 = 189 =
программа работает с данными.
Примечание: Быстрый способ задания глобальной точки ос-
танова предлагает окно Breakpoints. Подробнее о командах
Changed Memory Global и Expression True Global рассказывает-
ся выше.
Часто глобальные точки останова используются для отслежива-
ния изменения значения элемента данных. В этой ситуации Турбо от-
ладчик проверяет область памяти на изменение после выполнения
каждой строки кода. В качестве альтернативы глобальной точке ос-
танова вы можете задать точку останова, которая отслеживает из-
менение только при достижении определенного оператора. Это намно-
го более эффективно, поскольку существенно число операций Турбо
отладчика, которые он должен выполнять для обнаружения изменения
(в этом случае Турбо отладчику не важно, где изменяется элемент,
а важен сам факт его изменения).
Остановка при изменении объектов данных
-----------------------------------------------------------------
Когда вы хотите определить, где в вашей программе изменяются
в предыдущем разделе, установите глобальную
определенные объекты данных, сначала с помощью одного из методов,
описанных в предыдущем разделе, установите глобальную точку оста-
нова. Затем можно использовать селективный переключатель Changed
Memory (Измененная память) диалогового окна Conditions and
Actions (Условия и действия). Введите выражение, ссылающееся на
область памяти, которую вы хотите отслеживать и необязательный
счетчик числа отслеживаемых объектов. Общее число байт отслежива-
емой области соответствует произведению размера объекта, на кото-
рое ссылается выражение, на число объектов. Предположим, напри-
мер, что у вас имеется следующий массив Си:
int string[81];
Если вы хотите отследить изменение первого элемента данного
массива, введите в поле ввода Condition Expression следующий эле-
мент:
&sting[0], 10
Наблюдаемая область памяти имеет длину 20 байт, так как зна-
чение int занимает два байта, а вы задали отслеживание 10 байт.
Если точка останова по изменению памяти (Changed Memory) яв-
ляется глобальной, то ваша программа будет выполняться существен-
но медленнее, поскольку область памяти будет проверяться при вы-
полнении каждой строки исходного кода.
Если у вас установлен аппаратный драйвер, Турбо отладчик для
отслеживания изменений в области данных попытается установить ап-
паратную точку останова. Различные аппаратные отладчики поддержи-
вают различное число и типы аппаратных точек останова. Увидеть,
TDeb 3.0 #1-3 = 190 =
используются ли для точки останова аппаратные средства, можно с
помощью окна Breakpoints (Точки останова) и команды View¦
Breakpoints (Обзор¦Точки останова). Все точки останова, для кото-
рых используются вспомогательные аппаратные средства, будут отме-
чены звездочками (*). Такие точки останова выполняются гораздо
чем другие глобальные точки останова,
быстрее, чем другие глобальные точки останова, для которых не ис-
пользуются вспомогательные аппаратные средства.
Выражения условия
-----------------------------------------------------------------
Имеется много случаев, когда нежелательно, чтобы точка оста-
нова срабатывала при каждом выполнении определенной строки (опе-
ратора) исходного кода, особенно, когда эта строка выполняется
много раз до того, как встретится интересующий вас случай. Турбо
отладчик предоставляет вам два способа уточнения ситуации, когда
должна срабатывать точка останова: счетчики прохода и условия.
Область действия выражений, заданных для точек останова
-----------------------------------------------------------------
И действием, которое будет выполняться при достижении точки
останова, и условием, при котором она срабатывает, можно управ-
лять с помощью задаваемого вами выражения. Это выражение вычисля-
ется с использованием области действия адреса, где установлена
точка останова, а не той области действия, где в данный момент
остановилась программа. Это означает, что в вашем выражении для
точки останова могут использоваться только имена переменных, ко-
торые являются допустимыми в том месте программы, где задана точ-
ка останова (если эта область действия не переопределена). Пол-
ностью область действия обсуждается в Главе 9.
Если вы хотите установить точку останова для выражения в мо-
дуле, который в данный момент не загружен отладчиком, и Турбо от-
ладчик не может найти данное выражение, то вы можете переопреде-
лить область действия и задать файл, который содержит выражение,
или использоваться для смены модулей команду View¦Module (Об-
зор¦Модуль).
Если вы используете переменные, являющиеся по отношению к
ные или локальные по отношению
подпрограмме локальными, то такие точки останова обрабатываются
гораздо медленнее, чем те, в которых используются только глобаль-
ные или локальные по отношению к модулю переменные.
TDeb 3.0 #1-3 = 191 =
Аппаратные точки останова
-----------------------------------------------------------------
Аппаратная точка останова использует поддерживающие средства
аппаратной отладки (плату аппаратной отладки или отладочные ре-
гистры процессора 80386 или старше). Если в вашей системе уста-
новлены средства аппаратной отладки (команда File¦Get Info пока-
зывает установку Breakpoints в Hardware), то с помощью одного из
следующих методов вы можете задать аппаратную точку останова:
- Выберите команду Breakpoints¦Changed Memory Global, кото-
рая чаще всего используется для аппаратных точек останова.
- Выберите команду Breakpoints¦Hardware.
- Выведите меню Breakpoint Options (выберите команду окна
Vies¦Breakpoints Breakpoints¦At или Set Options), затем
сделайте следующее:
- проверьте переключатель Global;
- активизируйте "кнопку" Change (Изменение)ж
- в диалоговом окне Conditions and Actions выберите се-
лективный переключатель Hardware (Аппаратная) и акти-
визируйте "кнопку" Hardware диалогового окна;
- для вывода диалогового окна Hardware Breakpoint
Options (Параметры аппаратной точки останова) активи-
зируйте "кнопку" Hardware;
- выберите в диалоговом окне нужный параметр (параметры
описываются в текстовом файле HDWDEBUG.TD).
Регистрация значений переменных
-----------------------------------------------------------------
Иногда может оказаться полезным регистрировать
Иногда может оказаться полезным регистрировать значения оп-
ределенных переменных каждый раз, когда вы достигаете определен-
ного места программы. Вы можете регистрировать значение любого
выражения, включая, например, значения параметров при вызове
функции. Просматривая регистрацию при каждом вызове функции, вы
можете определить, когда эта функция вызывается с неверными пара-
метрами.
TDeb 3.0 #1-3 = 192 =
Выберите селективный переключатель Log (Регистрация) диало-
гового окна Breakpoint Options (Параметры точки останова). В от-
вет на выводимую подсказку введите выражение, значение которого
должно регистрироваться при каждом срабатывании точки останова.
Если вы хотите регистрировать значение нескольких переменных,
нужно установить несколько точек останова.
Примечание: При регистрации выражений нужно учитывать
побочные эффекты.
TDeb 3.0 #1-3 = 193 =
Точки останова и шаблоны
-----------------------------------------------------------------
Турбо отладчик поддерживает шаблоны C++. Точки останова ус-
танавливаются по-разному, в зависимости от использования F2 в ок-
не Module, в окне CPU или задании их с помощью диалогового окна
Breakpoint Options.
Точки останова и классы шаблонов
-----------------------------------------------------------------
Для задания точек останова в шаблонах имеется несколько ме-
тодов:
- Если вы установили точку останова в самом шаблоне, нажав
клавишу F2 при нахождении курсора в строке исходного кода
шаблона в окне Module, точки останова устанавливаются во
всех экземплярах классов этого шаблона. Это средство поз-
воляет вам отлаживать все поведение шаблона.
Если вы установили точку останова
- Если вы установили точку останова в шаблоне, нажав клавиши
Alt-F2 для вывода диалогового окна Breakpoint Options (Па-
раметры точки останова), то ввод в окне Module адреса вы-
ражения шаблона выводит диалоговое окно, позволяющее вам
выбрать экземпляр класса, для которого вы хотите устано-
вить точку останова.
Вы можете удалить точку останова шаблона точно так же, как
удаляете любую другую точку останова - позиционировавшись в окне
Module подсвеченную строку на шаблон и нажав клавишу F2 или ис-
пользуя команду удаления окна Breakpoint. При этом удаляются так-
же точки останова соответствующего экземпляра класса.
Если вы позиционируетесь на точке останова в экземпляре
класса в окне CPU и нажмете клавишу F2, то удаляется только точка
останова для данного экземпляра класса.
TDeb 3.0 #1-3 = 194 =
Точки останова в шаблонах функций
-----------------------------------------------------------------
Вы можете устанавливать и отменять точки останова для шабло-
нов функций точно также, как это делается для шаблонов классов.
При этом используются два метода - нажатие клавиши F2 или исполь-
зование диалогового окна Breakpoint Options. Они имеют для эк-
земпляров функций тот же эффект, что и для экземпляров классов.
Точки останова в шаблонах экземпляров классов и объектов
-----------------------------------------------------------------
Аналогично обычным классам и объектам, вы можете установить
точки останова в шаблонах экземпляров классов и объектов.
Окно Log
-----------------------------------------------------------------
Окно Log (Регистрация) можно создать, выбрав команду
View¦Log (Обзор¦Регистрация). Это окно позволяет вам просмотреть
которые имели место во время
список значащих событий, которые имели место во время сеанса от-
ладки.
г[*]=Log==========================3==[ ][ ]==¬
¦At MCINPUT.124 ^
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦Breakpoint at TPDEMO.220 -
¦We are now entering procedure Params... -
¦Breakpoint-at-TPDEMO.180--------------------v
L<----------------------------------------->--
Рис. 7.6 Окно Log
В окне Log (Регистрация) выводится пролистываемый список
строк (вывод в окно). Если зарегистрировано более 50 строк, то
самые старые строки списка теряются. Для настройки числа строк
используйте параметр командной строки при запуске Турбо отладчика
или измените это число с помощью программы установки TDINST. С
помощью команды локального меню Open Log File (Открыть файл ре-
гистрации) можно сохранить всю регистрацию, записывая ее непре-
рывно в файл на диске.
Перечислим, какие причины могут вызвать запись строк в про-
токол регистрации:
- Ваша программа остановилась по заданному адресу. Адрес ее
останова регистрируется.
TDeb 3.0 #1-3 = 195 =
- Вы дали команду локального меню Add Comment (Добавить ком-
ментарий). Выводится подсказка, по которой нужно ввести
комментарий, регистрируемый в протоколе.
- Срабатывает точка останова, которая регистрирует значение
выражения.
для записи текущего содержимого области
Это значение помещается в протокол регистрации.
- Вы использовали команду Window¦Dump Pane To Log (Окно¦Вы-
вод области в протокол регистрации) (из основного меню)
для записи текущего содержимого области окна.
- Вы отлаживаете прикладную программу для Microsoft Windows
и использовали команду View¦Windows Messages (Обзор¦Сооб-
щения Windows) для вывода окна Windows Messages, и теперь
находитесь в локальном меню области Messages этого окна.
Вы переключаете параметр Send to Log Window (Передача в
окно регистрации) в значение Yes (Да), чтобы все приходя-
щие в данное окно сообщения также отображались в Log.
- Вы отлаживаете прикладную программу для Microsoft Windows
и используете команду Display Window Info (Вывод информа-
ции Windows) локального меню окна Log для записи в журнал
информации о глобальной динамически распределяемой области
памяти, информации о локальной динамически распределяемой
области или списка модулей.
TDeb 3.0 #1-3 = 196 =
Локальное меню окна Log
-----------------------------------------------------------------
Команды данного меню позволяют вам управлять записью прото-
кола регистрации в файл на диске, останавливая и начиная регист-
рацию, добавляя в протокол регистрации комментарий, и очищая про-
токол.
Локальное меню окна Log (Регистрация) выводится при нажатии
клавиш Alt-F10. Если разрешено использовать сокращения с клавишей
Ctrl, то для непосредственного доступа к команде этого меню можно
нажать клавишу Ctrl совместно с первой буквой нужной команды.
-------------------------¬
Открыть файл регистрации ¦ Open log file... ¦
По команде Open Log File
Закрыть файл регистрации ¦ Close log file ¦
Регистрация ¦ Logging YES ¦
Добавить комментарий ¦ Add comment... ¦
Стереть файл регистрации ¦ Erase log ¦
Вывести информацию ¦ Display Windows Info...¦
Windows L-------------------------
Команда Open Log File...
-----------------------------------------------------------------
По команде Open Log File (Открыть файл регистрации) все
строки, записываемые в протокол регистрации, записываются также в
файл на диске. Вам выводится подсказка с запросом имени файла, в
который нужно записывать протокол регистрации.
Когда вы открываете файл регистрации, в него записываются
все строки, которые уже выведены на экран в окне регистрации. Это
позволяет вам открыть файл на диске после того, как вы увидите
что-то вас интересующее и захотите записать это на диск.
Если вы хотите начать регистрацию на диске, не включая в нее
строки, которые уже выведены на экран, то перед выбором команды
Open File Log (Открыть файл регистрации) выберите сначала команду
Erase Log File (Стереть файл регистрации).
TDeb 3.0 #1-3 = 197 =
Команда Close Log File
-----------------------------------------------------------------
Команда Close Log File (Закрыть файл регистрации) останавли-
вает запись строк в файл регистрации, заданный в команде локаль-
ного меню Open Log File (Открыть файл регистрации). Данный файл
закрывается.
Команда Logging
-----------------------------------------------------------------
Команда Logging (Регистрация) разрешает или запрещает ре-
гистрацию, управляя выводом в окно Log (Регистрация).
Данная команда выводит диалоговое окно
Команда Add Comment
-----------------------------------------------------------------
Команда Add Comment (Добавить комментарий) позволяет вам
включить в регистрируемую информацию комментарий. В ответ на
подсказку можно ввести строку текста, которая может содержать
столько символов, сколько вам требуется.
Команда Erase Log
-----------------------------------------------------------------
Команда Erase Log (Стереть регистрацию) очищает список ре-
гистрации. Окно Log (Регистрация) заполняется пробелами. Это не
влияет на запись регистрации в файл на диске.
Команда Display Windows Info
-----------------------------------------------------------------
Данная команда выводит диалоговое окно Windows Information
(Информация Windows), позволяющий получить информацию о глобаль-
ной и локальной динамически распределяемой области памяти или
списке модулей, входящих в вашу прикладную программу. Это средс-
тво описано подробнее в Главе 17.
TDeb 3.0 #1-3 = 198 =
Глава 8. Просмотр и модификация файлов
-----------------------------------------------------------------
При отладке программы Турбо отладчик обрабатывает файлы на
диске как естественное расширение программы. Вы можете проверить
и модифицировать любой файл на диске, просматривая его в коде
ASCII или в шестнадцатиричном виде. Из среды Турбо отладчика мож-
но также изменить текcтовые файлы с помощью используемого вами
текстового процессора или редактора.
В данной главе рассказывается, как можно анализировать и мо-
дифицировать два вида файлов на диске: файлы, в которых содержит-
ся исходный код программы, и другие файлы.
Просмотр исходных файлов программы
Исходными файлами программы являются те
-----------------------------------------------------------------
Исходными файлами программы являются те файлы, с помощью
компиляции которых создаются выполняемые модули (файлы .EXE).
Обычно их просматривают, когда хотят проанализировать поведение
программы или написать фрагмент кода. При отладке часто приходит-
ся просматривать исходный код функции, чтобы определить, допусти-
мы ли ее аргументы и корректно ли возвращаемое ей значение.
Примечание: Загрузка и отладка модулей Windows DLL опи-
сывается в Главе 17.
При прохождении программы с использованием Турбо отладчика
он автоматически выводит на экран ту часть исходного кода, кото-
рая соответствует текущему адресу программы.
Файлы, включенные в исходный файл с использованием директивы
компилятора, которая генерирует номера строк (аналогично директи-
ве #include в языке Си и INCLUDE в Ассемблера) также рассматрива-
ются, как исходные файлы программы. Для просмотра исходных файлов
программы всегда нужно использовать окно View¦Module (Окно¦Мо-
дуль), поскольку это указывает Турбо отладчику, что файл предс-
тавляет собой исходный модуль. Для выбора одного из файлов нужно
использовать команду локального меню File (Файл).
TDeb 3.0 #1-3 = 199 =
Окно Module
-----------------------------------------------------------------
Окно Module (Модуль) можно создать, выбрав в главном меню
команду View¦Module (Обзор¦Модуль) (или нажав клавишу F3).
г=[*]=Module: TPDEMO File: TPDEMO.PAS 217 ====================¬
¦ end; ^
¦ Writeln; -
¦ end; { ParmsOnHeap } -
¦ -
В диалоговом окне вы можете
¦> begin -
¦ Init; -
¦ Buffer := GetLine; -
¦ while Buffer <> '' do -
¦ begin -
¦ ProcessLine(Buffer); -
¦ Buffer := GetLine; -
¦ end; -
¦ ShowResult; -
¦ ParmsOnHeap; -
¦ end. -
¦ -
¦ -
¦ -
¦ v
L<----------------------------------------------------------->-
Рис. 8.1 Окно Module
В диалоговом окне вы можете ввести имя модуля, который хоти-
те просмотреть.
Если вы отлаживаете прикладную программу Windows, в данном
диалоговом окне выводится список, в котором показаны модули прог-
раммы, и список, в котором показаны файлы DLL и .EXE, загруженные
в данный момент Windows.
Примечание: При запуске отладчика TDW вам требуется как
файл .EXE, так и исходные текстовые файлы, а также выполняе-
мый и исходный код всех написанных для программы библиотек
DLL.
При этом Турбо отладчик загрузит исходный файл выбранного
модуля. Поиск исходного файла он выполняет в следующем порядке:
1. В каталоге, в котором находится выполняемый файл компиля-
В каталоге, где содержатся отлаживаемые
тора.
2. В каталогах, заданных командой Options¦Path (Параметры
¦Маршрут) для команды Source (Исходный модуль), или в па-
раметре командной строки -sd.
TDeb 3.0 #1-3 = 200 =
3. В текущем каталоге.
4. В каталоге, где содержатся отлаживаемые программы.
В окне Module (Модуль) выводится содержимое исходного файла
выбранного модуля. В заголовке окна Module показывается имя прос-
матриваемого модуля, имя исходного файла и номер строки, в кото-
рой находится курсор. Текущий адрес программы (CS:IP) отмечен
символом стрелки (>) в первой позиции окна.
Если после имени файла в заголовке выводится сообщение opt,
то программа оптимизирована компилятором. При поиске некоторых
исключенных при оптимизации переменных вы можете столкнуться с
трудностями. Кроме того, переменные, которые стали регистровыми,
не будут иметь адреса.
Если после имени файла в заголовке появляется слово modified
(модифицирован), то со времени последней компиляции или компонов-
ки для создания отлаживаемой программы файл был изменен. Это оз-
начает, что номера строк программ в обновленном исходном файле
могут не соответствовать номерам строк отлаживаемой программы.
Это может привести к тому, что стрелка, показывающая текущий ад-
рес в программе (CS:IP), будет указывать на неверную строку.
Локальное меню окна Module
-----------------------------------------------------------------
В локальном меню окна Module (Модуль) предусмотрено несколь-
ко команд, позволяющих вам перемещаться в указанном модуле, ссы-
латься на элементы данных и проверять их, а также выводить в окно
новый файл или модуль.
Вероятно, при работе с отладчиком вы будете пользоваться
Для вывода локального меню данного
этим меню чаще, чем другими меню, поэтому лучше ближе познако-
миться с различными его возможностями.
Для вывода локального меню данного окна можно использовать
комбинацию клавиш Alt-F10. Если разрешено использовать сокращения
с клавишей Ctrl, то для непосредственного доступа к команде этого
меню можно нажать клавишу Ctrl вместе с первой буквой нужной ко-
манды (например, при нажатии Ctrl-S вызовется команда Search).
-------------¬
Проверка ¦ Inspect ¦
Просмотр ¦ Watch ¦
+------------+
Модуль ¦ Module... ¦
Файл ¦ File... ¦
+------------+
Предыдущий ¦ Previous ¦
Строка ¦ Line... ¦
Поиск ¦ Search... ¦
TDeb 3.0 #1-3 = 201 =
Следующий ¦ Next... ¦
Начало ¦ Origin ¦
Переход ¦ Goto... ¦
Редактирование ¦ Edit ¦
L-------------
Команда Inspect
-----------------------------------------------------------------
Команда Inspect (Проверка) открывает окно проверки,в котором
выводится содержимое переменной программы, расположенной в теку-
щей позиции курсора. Перед тем как дать эту команду вы можете по-
местить курсор в исходном файле на одну из переменных программы,
или ввести ее имя в поле ввода выводимого диалогового окна.
Поскольку эта команда избавляет вас от ввода каждого имени
с ее помощью можно проверить
проверяемой переменной, с ее помощью можно проверить множество
переменных программы.
Команда Watch
-----------------------------------------------------------------
Команда Watch (Просмотр) добавляет в окно просмотра перемен-
ную, расположенную в текущей позиции курсора. Ее полезно исполь-
зовать, если вы хотите при выполнении программы непрерывно отсле-
живать значение переменной. Перед тем, как давать эту команду,
нужно поместить в исходном файле курсор на одну из переменных
программы.
Примечание: Если курсор не находится на переменной, вам
выведется подсказка для ее ввода.
Команда Module...
-----------------------------------------------------------------
Команда Module (Модуль) позволяет вам просмотреть другой мо-
дуль (который можно выбрать из выводимого списка модулей). Эту
команду полезно использовать, когда вас больше не интересует те-
кущий модуль, но вы не хотите открывать еще одно окно Module.
Команда File...
-----------------------------------------------------------------
Команда File (Файл) позволяет вам переключиться на просмотр
того или иного исходного файла, входящего в состав просматривае-
мого модуля. Выберите файл, который вы хотите просмотреть, из
списка файлов. Большинству модулей соответствует один исходный
файл, в котором находится весь исходный код. В других включаемых
в данный файл файлах содержатся обычно только определенные конс-
танты и структуры данных. Используйте данную команду, если исход-
ный код вашего модуля содержится в нескольких файлах.
TDeb 3.0 #1-3 = 202 =
Если вы хотите просматривать одновременно несколько файлов,
то для создания другого окна File (Файл) используйте команду ос-
который вы просматривали. Эту команду
новного меню View¦Another¦File (Обзор¦Другой¦Файл), или для того,
чтобы просмотреть первый файл - команду View¦File (Обзор¦Файл).
Команда Previous
-----------------------------------------------------------------
Команда Previous (Предыдущий) возвращает вас в последний ис-
ходный модуль, который вы просматривали. Эту команду можно также
использовать для возврата к предыдущему месту после того, как вы
дали команду, которая изменила позицию в текущем модуле.
Команда Line...
-----------------------------------------------------------------
Команда Line (Строка) позиционирует вас в файле на строку с
другим номером. Введите номер новой строки, на которую вы хотите
перейти. Если вы введете номер строки, превышающий число строк в
файле, во эта команда переместит вас на последнюю строку файла.
Команда Search...
-----------------------------------------------------------------
Команда Search (Поиск) выполняет поиск символьной строки,
начиная от текущей позиции курсора. Если курсор позиционируется
на что-либо, напоминающее имя переменной, выводится подсказка по-
иска, инициализированная данным именем. Кроме того, если с по-
мощью клавиши Ins вы отметили в файле блок, то этот блок будет
использован для инициализации подсказки поиска. Это позволяет вам
избежать ввода строки, которая уже видна в файле.
При поиске допускается задавать простые трафаретные символы:
?, задающий один символ, и *, показывающую 0 или более символов.
При достижении конца файла поиск не будет продолжен с его начала.
Чтобы выполнить поиск по всему файлу, перейдите на начало файла с
помощью клавиш Ctrl-PgUp.
Команда Next
-----------------------------------------------------------------
Эту команду можно использовать только
Команда Next (Следующий) выполняет поиск следующего вхожде-
ния символьной строки, которую вы задали в команде Search (По-
иск). Эту команду можно использовать только после команды Search.
Иногда команда поиска, найдя соответствие, останавливается
не на нужной строке, а нужная строке находится дальше в файле.
Команда Next позволяет вам возобновить поиск без повторного ввода
TDeb 3.0 #1-3 = 203 =
искомой строки.
Команда Origin
-----------------------------------------------------------------
Команда Origin (Начало) позиционирует вас на тот модуль и
номер строки, которые соответствуют текущему адресу программы
(определяемому содержимым регистров CS:IP). Если просматриваемый
в данный момент модуль не является модулем, содержащим текущий
адрес программы, окно Module (Модуль) переключится, и будет выве-
ден нужный модуль. Данную команду полезно использовать после то-
го, как вы просмотрели исходный код и хотите вернуться к тому
месту, где в данный момент остановилась программа.
TDeb 3.0 #1-3 = 204 =
Команда Goto...
-----------------------------------------------------------------
Команда Goto (Перейти на...) позиционирует вас на любой ад-
рес в программе. От вас требуется ввести соответствующий "адрес".
При этом допускается вводить номер строки, имя функции или шест-
надцатиричный адрес. Полное описание способов задания адреса со-
держится в Главе 9.
Эту команду можно вызвать, если просто начать вводить метку,
на которую вы хотите перейти. Это приведет к выводу окна подсказ-
ки (как если бы вы использовали команду Run¦Execute to (Выполне-
ние¦Выполнение до курсора)). Для часто используемой команды это
ного кода, то открывается окно
является удобным сокращением.
Примечание: Если адресу не соответствует строка исход-
ного кода, то открывается окно CPU.
Команда Edit
-----------------------------------------------------------------
Команда Edit (Редактирование) позволяет выбрать редактор, с
помощью которого вы можете внести изменения в исходный файл прос-
матриваемого модуля. Задать команду, запускающую ваш редактор,
можно с помощью программы установки параметров Турбо отладчика
TDINST.
Просмотр других файлов на диске
-----------------------------------------------------------------
С помощью окна File (Файл) вы можете проверить и модифициро-
вать любой файл в вашей системе. Просматривать файл можно в коде
ASCII (текстовый вид) или в шестнадцатиричном виде, либо в виде
шестнадцатиричных байт данных (для этого используются команда
Display As, описанная далее в данной главе).
TDeb 3.0 #1-3 = 205 =
Окно File
-----------------------------------------------------------------
Окно File (Файл) можно создать, выбрав команду View¦File
(Обзор¦Файл) из основного меню. Для получения списка файлов для
выбора допускается использовать трафаретные символы DOS.
г[*]=File: C:\tc\doc.h 197========================[ ][ ]¬
¦ char _Cdecl peekb (unsigned segment, unsigned offset);^
¦ void _Cdecl poke (unsigned segment, unsigned offset, -
¦ void _Cdecl pokeb (unsigned segment, unsigned offset, -
¦ int _Cdecl randbrd (struct fcb *fcb, int rcnt); -
¦ int _Cdecl segread (struct fcb *fcb, int rcnt); -
¦ void _Cdecl setblock(unsigned segx, unsigned newsize);-
¦ int _Cdecl setcbrk (int cbrkvalue); -
а также номер строки, на
¦ int _Cdecl setdate (struct date *datep); -
¦ void _Cdecl setswrichar (char ch); -
¦ void _Cdecl settime (struct time *timep); -
¦ void _Cdecl setvect (int interruptno, void interrupt (-
¦ void _Cdecl setverify (int value); -
¦ void _Cdecl sleep (unsigned seconds); -
¦ void _Cdecl sound (unsigned frequency); v
L<----------------------------------------------------->-
Рис. 8.2 Окно File
В окне File (Файл) выводится содержимое выбранного вами фай-
ла. Имя просматриваемого файла, а также номер строки, на которой
в файле находится курсор, выводится в заголовке окна (как текст в
коде ASCII).
При первом создании окна File файл может выводиться либо в
виде текста в коде ASCII, либо в шестнадцатиричном виде, в зави-
симости от того, рассматривает ли Турбо отладчик данный файл, как
текстовый файл (ASCII) или как двоичные данные. С помощью команды
локального меню Display As (Вывести, как...) можно переключить
режим вывода на экран (эта команда описана далее).
TDeb 3.0 #1-3 = 206 =
г[*]=File: C:\tc\doc.h 197========================[ ][ ]¬
¦0000: 2f 2a 09 64 6f 73 2e 68 ¦* dis.h ^
¦0008: 0d 0a 0d 0a 09 44 65 66 Def -
¦0010: 69 6e 65 73 20 73 74 72 ines str -
¦0018: 75 63 74 73 2c 20 75 6e ucts, un -
¦0020: 69 6f 6e 73 2c 20 6d 61 lons, ma -
¦0028: 63 72 6f 73 2c 20 61 6e cros, an -
¦0020: 63 20 66 75 6e 63 74 69 d functi -
¦0038: 6f 6e 73 20 74 6e 67 0d ons for -
¦0040: 64 65 61 6c 20 68 6e 4d dealing -
File б ўлў®¤®¬
¦0048: 0a 09 77 69 20 61 20 4d with M -
¦0050: 53 44 4f 53 41 49 6e 64 SDOS and -
¦0058: 20 74 68 65 63 50 6e 74 the Int -
¦0060: 65 6c 20 69 50 72 58 38 el iAPx8 -
¦0068: 36 20 6d 69 41 72 6f 70 6 microp -
¦0070: 72 6f 63 65 63 73 6f 72 rocessor v
L<----------------------------------------------------->-
Рис. 8.3 Окно File с выводом шестнадцатиричных данных
Локальное меню окна File
-----------------------------------------------------------------
Локальное меню окна File (Файл) содержит команды для переме-
щения по файлу на диске, изменения характера вывода содержимого
файла на экран и внесения в файл изменений.
Для вывода локального меню окна File используйте комбинацию
клавиш Alt-F10. Если разрешено использовать сокращения с клавишей
Ctrl, то для непосредственного доступа к команде этого меню можно
нажать клавишу Ctrl совместно с первой буквой нужной команды.
--------------------¬
¦ Goto... ¦ Переход
¦ Search... ¦ Поиск
¦ Next ¦ Следующий
+-------------------+
¦ Display as Ascii ¦ Вывести в виде...
¦ File... ¦ Файл
¦ Edit ¦ Редактирование
L--------------------
Команда Goto
-----------------------------------------------------------------
Эта команда позиционирует вас на строку с другим номером или
смещением. Если вы просматриваете файл в текстовом виде (в коде
ASCII), введите номер строки, на которую вы хотите перейти. Если
вы просматриваете текст в виде шестнадцатиричных байт, введите
При вводе смещения вы можете
смещение относительно начала файла, с которого вы хотите начать
TDeb 3.0 #1-3 = 207 =
вывод на экран. При вводе смещения вы можете использовать полный
анализатор выражений. Если вы зададите строку, номер которой пре-
вышает число строк в файле, во эта команда переместит вас на пос-
леднюю строку файла (в конец файла).
Команда Search
-----------------------------------------------------------------
Команда Search (Поиск) выполняет поиск символьной строки,
начиная от текущей позиции курсора (для ввода символьной строки
вам выводится подсказка). Если курсор позиционируется на что-ли-
бо, напоминающее имя переменной, выводится подсказка поиска, ини-
циализированная данным именем. Кроме того, если с помощью клавиши
Ins вы отметили в файле блок, то этот блок будет использован для
инициализации подсказки поиска. Это позволяет вам избежать ввода
строки, которая уже видна в файле.
Если файл выводится в коде ASCII, при поиске допускается за-
давать простые трафаретные символы: ?, задающий один символ, и *,
показывающую 0 или более символов.
Если файл выводится в шестнадцатиричном виде, то нужно зада-
вать список байт, состоящий из байтовых значений или заключенных
в кавычки строк символов (используется тот же синтаксис языка,
что и при вводе выражений).
Например, в языке Си список байт, состоящий из шестнадцати-
ричного числа 0408, вводится следующим образом:
Ox0884
Если текущим языком является Паскаль, то тот же список байт
вводится так:
$0804
Примечание: Полная информация о списках байт приведена
в Главе 9.
При достижении конца файла поиск не будет продолжен с его
начала. Чтобы выполнить поиск по всему файлу, перейдите на начало
Вы можете вызвать эту команду,
файла с помощью клавиш Ctrl-PgUp.
Вы можете вызвать эту команду, просто начав набирать строку,
которую хотите найти. При этом, как при команде Search (Поиск),
будет выведено окно подсказки.
Команда Next
-----------------------------------------------------------------
Команда Next (Следующий) выполняет поиск следующего вхожде-
ния символьной строки, которую вы задали в команде Search (По-
иск). Эту команду можно использовать только после команды Search
TDeb 3.0 #1-3 = 208 =
(Поиск).
Иногда команда поиска, найдя соответствие, останавливается
не на нужной строке, а нужная строке находится дальше в файле.
Команда Next позволяет вам возобновить поиск без повторного ввода
искомой строки.
Команда Display As
-----------------------------------------------------------------
Команда Display As (Вывести как...) позволяет переключаться
между выводом файла в виде текста ASCII и в шестнадцатиричном ви-
де. При выборе вывода на экран в коде ASCII файл выводится в та-
ком виде, как вы видите его при работе с редактором или текстовым
процессором. Если вы выберете шестнадцатиричный вывод, каждая
строка будет начинаться с шестнадцатиричного смещения в файле. На
строке может выводиться 8 или 16 байт данных, в зависимости от
ширины области окна. Справа от шестнадцатиричного вывода байт вы-
водятся соответствующие каждому байту символы.Поскольку может вы-
водиться полный набор символов, байтовые значения < 32 или > 127
выводятся на экран в виде соответствующих символов.
Команда File...
-----------------------------------------------------------------
Команда File (Файл) позволяет вам переключиться на просмотр
другого файла. Для получения списка
другого файла. Для получения списка файлов для выбора допускается
использовать трафаретные символы DOS, либо можно ввести имя конк-
ретного файла, который и будет загружен. Если вы хотите просмат-
ривать на экране два различных файла одновременно, то для созда-
ния другого окна File (Файл) используйте команду
View¦Ahother¦File (Обзор¦Другой¦Файл).
Команда Edit
-----------------------------------------------------------------
Если вы просматриваете файл в виде текста ASCII, команда
Edit (Редактирование) позволяет вам вносить в файл изменения,
вызвав редактор, выбранный с помощью программы установки парамет-
ров отладчика TDINST.
Если вы просматриваете файл в виде шестнадцатиричных байт,
то отладчик не запускает редактор. Вместо этого вам выводится
подсказка для замены байт в текущей позиции. Введите список байт,
как это делается в команде поиска.
Примечание: Полное описание списков байт содержится в
Главе 9.
TDeb 3.0 #3-3 = 1 =
Глава 17. Турбо отладчик для Windows (TDW)........................8
Требования для запуска TDW......................................8
Установка TDW...................................................9
Настройка конфигурации TDW.....................................10
Использование параметров командной строки TDW..................10
Использование TDINST для TDW...................................12
Использование TDW..............................................12
Различия между TDW и Турбо отладчиком..........................12
Новые средства TDW.............................................14
Регистрация сообщений Windows..................................14
Выбор окна.....................................................16
Выбор окна для прикладной программы,
Добавление выбранного окна.....................................16
Выбор окна для прикладной программы, использующей
ObjectWindows.................................................17
Получение описателя окна.......................................18
Задание окна с разрешенной поддержкой ObnjectWindows...........19
Добавление выбора окна с разрешенной поддержкой
ObjectWindows.................................................19
Отмена выбора окна.............................................21
Задание класса сообщений и действия............................22
Добавление класса сообщений....................................22
Удаление класса сообщений......................................25
Просмотр сообщений.............................................26
Замечания по сообщениям окна...................................26
Получение содержимого памяти и списка модулей..................28
Получение списка содержимого...................................29
Листинг содержимого локальной динамически распределяемой
области.......................................................30
Формат вывода локальной динамически распределяемой области.....32
Получение списка модулей.......................................32
Формат вывода списка модулей Windows (Таблица 17.7)............33
Отладка динамически компонуемых библиотек (DLL)................33
Использование диалогового окна Load Modules or DLLs............35
Переход к другому исходному модулю.............................36
Работа с DLL и программами.....................................36
Добавление DLL в список DLLs & Programs........................37
Установка параметров отладки для DLL...........................39
Управление загрузкой TDW таблиц имен идентификаторов DLL.......39
Отладка начального кода загрузки DLL...........................39
Отладка прикладной программы
Преобразование описателей памяти в адреса......................42
Рекомендации по отладке........................................42
Сообщения об ошибках TDW.......................................44
Глава 18. Отладка прикладной программы для Windows...............45
Примеры программ...............................................45
Компиляция и компоновка демонстрационных программ..............47
Отладка программы BCWDEMOA.....................................47
Принятие решения о дальнейших действиях........................47
Завершение BCWDEMOA............................................48
Регистрация сообщений..........................................50
Анализ протокола сообщений.....................................50
Поиск ошибки...................................................51
Пошаговое выполнение программы.................................52
Анализ DoPaint.................................................55
TDeb 3.0 #3-3 = 2 =
Нахождение ошибки..............................................55
Завершение BCWDEMOA............................................55
Отладка BCWDEMOB...............................................56
Переключение из программы......................................57
Тестирование программы.........................................57
Принятие решения...............................................57
Сравнение списков объектов глобальной памяти...................58
Нахождение ошибки: функциональный подход.......................59
Выбор элементов меню...........................................59
Рисование фигуры...............................................60
Рисование фигуры (и нахождение позиции ошибки).................60
Перерисовка экрана.............................................62
Заключение.....................................................62
Отладка программы, использующей
Глава 19. Отладка программы, использующей ObjectWindows..........63
О программе....................................................63
Определение оконного типа ScribbleWindow.......................64
Конструктор ScribbleWindow.....................................66
GetWindowClass.................................................66
WMRButtonDown..................................................66
WMLButtonUp....................................................66
WMRButtonDown..................................................66
WMMouseMove....................................................66
Подпрограммы цвета пера........................................67
Создание прикладной программы..................................68
Отладка программы..............................................68
Выявление первой ошибки........................................68
Поиск функции, которая вызывает Windows........................68
Отладка функции WMLButtonDown..................................70
Отладка MoveTo.................................................70
Исправление ошибки.............................................70
Проверка исправлений...........................................72
Поиск ошибки назначения цвета пера.............................72
Установка точки останова по сообщению окна.....................72
Задание точки останова по сообщению окна по описателю..........74
Установка точки прерывания по сообщению на объекте окна........76
Проверка wParam................................................76
Проверка исправления...........................................78
Поиск ошибки рисования за пределом экрана......................78
Регистрация сообщений Windows..................................79
Обнаружение ошибки.............................................79
Исправление ошибки.............................................79
Отладка резидентных программ
Проверка исправлений...........................................82
Поиск ошибки стирания экрана...................................82
Анализ причины ошибки..........................................83
Исправление ошибки.............................................83
Проверка исправления...........................................83
Глава 20. Отладка резидентных программ и драйверов
устройств.....................................................84
Что такое резидентная программа?...............................84
Отладка резидентной в памяти программы.........................85
Что такое драйвер устройства?..................................88
Отладка драйвера устройства....................................90
Завершение сеанса отладки......................................92
TDeb 3.0 #3-3 = 3 =
Приложение A. Параметры командной строки.........................94
Приложение B. Технические замечания..............................96
Измененный адрес загрузки и свободная память...................96
Сбой системы...................................................96
Трассировка в DOS и переключение идентификатора процесса.......97
Использование сопроцессора 8087/80287 и эмулятора..............97
Прерывания, используемые Турбо отладчиком......................97
Прерывание 1/Прерывание3.......................................97
Прерывание 2...................................................97
Прерывание 9...................................................98
Отладка при использовании прерываний INT3 и INT1...............98
Сохранение содержимого и переключение режима экрана............98
Потребности в памяти...........................................99
Поддержка EMS..................................................99
Сохранение и восстановление вектора прерываний................100
Приложение C. Ключевые слова встроенного
Приложение C. Ключевые слова встроенного Ассемблера.............101
Мнемонические обозначения команд процессора 80386.............102
Мнемонические обозначения команд процессора 80486 Таблица C.3.102
Регистры процессора 80386 Таблица C.4.................102
Регистры центрального процессора Таблица C.5.............102
Специальные зарезервированные слова Таблица C.6............102
Мнемонические обозначения команд сопроцессора 8087/80287......103
Мнемонические обозначения команд сопроцессора 80387 ..........103
Приложение D. Настройка Турбо отладчика.........................104
Запуск программы TDINST.......................................104
Параметры командной строки TDWINST............................105
Параметр -C...................................................105
Параметр -W...................................................106
Параметр -P...................................................106
Установка цветов экрана.......................................106
Настройка цветов экрана.......................................106
Окна..........................................................107
Диалоговые окна...............................................109
Меню..........................................................111
Экран.........................................................111
Цвета, используемые по умолчанию..............................112
Установка параметров экрана Турбо отладчика...................112
Переключатели Display Swapping................................113
Переключатель Integer Format..................................113
Параметр Beginning Display....................................114
Переключатель Screen Lines....................................114
Tab Size......................................................114
Maximum Tiled Watch...........................................114
Поле ввода Log List
Параметр Fast Screen Update...................................114
Параметр Permit 43/50-Line Mode...............................115
Параметр Full Graphics Save...................................115
Переключатель User Screen Updating............................115
Поле ввода Log List Length....................................117
Поле ввода Floating Precision.................................117
Поле ввода Range Inspect......................................117
Установка параметров Турбо отладчика..........................117
TDeb 3.0 #3-3 = 4 =
Параметр Directories..........................................117
Параметр Input and Prompting..................................119
Диалоговое окно Source Debugging..............................121
Параметр Ignore Symbol Case...................................121
Параметр OWL window messages..................................121
Диалоговое окно Miscellaneous Options.........................123
NMI intersept (Перехват немаскируемого прерывания)............124
Use Expanded Memory (Использование расширенной памяти)........124
Change Process ID (Смена идентификатора процесса).............124
Full Trace History (Полный протокол трассировки)..............124
Параметр International (Международный)........................125
DOS Shell Swap Size...........................................126
Spare Symbol Memory...........................................126
Remote Type (Тип удаленной отладки)...........................126
Remote Link Port (Порт удаленной связи).......................126
Link Speed (Cкорость коммуникаций)............................126
Network Local Name (Локальное имя в сети).....................126
Network Remote Name (Удаленное имя в сети)....................126
Задание режимов вывода........................................128
Удаленная отладка прикладных программ для
Параметры командной строки и их эквиваленты в программе
TDINST.......................................................129
В процессе работы.............................................131
Сохранение файла конфигурации.................................131
Модификация файла TD.EXE......................................131
Выход из программы TDINST.....................................131
Приложение E. Удаленная отладка.................................133
Требования к программному и аппаратному обеспечению...........134
Отладка удаленных прикладных программ DOS.....................134
Установка удаленной системы...................................135
Настройка конфигурации TDREMOTE...............................136
Настройка TDREMOTE............................................136
Удаленный драйвер DOS.........................................137
Запуск удаленного последовательного драйвера..................137
Запуск удаленного драйвера LAN................................138
Как установить удаленную связь в DOS..........................138
Последовательное соединение...................................138
Соединение через LAN..........................................139
Удаленная отладка прикладных программ для Windows.............140
Подготовка удаленной системы..................................140
Конфигурация WREMOTE..........................................141
Установка WREMOTE и WRSETUP в Windows.........................142
Связь через последовательный порт.............................142
Связь через LAN...............................................144
Параметры командной строки программы WREMOTE..................145
Запуск удаленного драйвера Windows............................145
Установка связи с удаленной системой с Windows................145
Связь через последовательный порт.............................146
Bad or mission configuration file
Связь через LAN...............................................146
Загрузка программы в удаленную систему........................147
Сеансы удаленной отладки......................................147
Возможные затруднения.........................................148
Сообщения утилиты TDREMOTE....................................149
Сообщения программы WREMOTE...................................152
TDeb 3.0 #3-3 = 5 =
Приложение F. Подсказки и сообщения об ошибках..................153
Подсказки.....................................................153
Ошибки........................................................162
Фатальные ошибки..............................................162
Сообщения об ошибках..........................................164
')' expected..................................................164
':' expected..................................................164
']' expected..................................................164
Already logging to a file.....................................165
Ambiguous symbol name.........................................165
Bad or mission configuration file name........................165
Cannot access an inactive scope...............................165
Cannot be changed.............................................165
Can't do this when Turbo Debugger is resident.................165
Can't do this when user program is resident...................165
Can't execute DOS command processor...........................166
Can't go resident until user program terminates...............166
Can't set a breakpoint at this address........................166
Can't set any more hardware breakpoints.......................166
Can't set hardware condition on this breakpoint...............166
Can't have more then one segment override.....................166
t set that sort of
Can't set a breakpoint at this location.......................167
Can' t set that sort of hardware breakpoint....................167
Can't set hardware condition on this breakpoint...............167
Can't swap user program to disk...............................167
Constructors and destructors cannot be called.................167
Count value too large.........................................167
Ctlr-Alt-SysRq interrupt. System crash possible. Continue?....168
Destination too far away......................................168
Divide by zero................................................168
DLL already in list...........................................168
Edit program not specified....................................168
Error loading program.........................................169
Error opening file___.........................................169
Error opening log file___.....................................169
Error reading block into memory...............................169
Error saving configuration....................................169
Error swaping in user program, press key to load..............169
Error writing block on disk...................................169
Error writing log file........................................170
Error writing to file.........................................170
Expression too complex........................................170
Expressions with side effects not permitted...................170
Extra input after expression..................................170
Help file ___ not found.......................................171
Illegal procedure or function call............................171
Immediate operand out of range................................171
Initialization not complete...................................171
Invalid argument list.........................................171
Invalid register combination in address
Invalid character constant....................................172
Invalid format string.........................................172
Invalid function parameter(s).................................172
Invalid instruction...........................................172
TDeb 3.0 #3-3 = 6 =
Invalid instruction mnemonic..................................172
Invalid number entered........................................173
Invalid operand(s)............................................173
Invalid operator/data combination.............................173
Invalid pass count entered....................................173
Invalid register..............................................173
Invalid register combination in address expression............173
Invalid register in address expression........................174
Invalid symbol in operand.....................................174
Invalid type cast.............................................174
Invalid value entered.........................................174
Keyword not a symbol..........................................175
Left side not a record, structure or union....................175
No coprocessor or emulator installed..........................175
No hardware debugging avaliable...............................175
No help for this context......................................175
No modules with line number information.......................176
No previous search expression.................................176
No program loaded.............................................176
No source file for module___..................................176
No type information for this symbol...........................176
Not a function name...........................................176
Not a record, structure, or union member......................177
Not enough memory for selected
Not enough memory for selected operation......................177
Not enogh memory to load program..............................177
Not enough memory to load symbol table........................177
Only one operand size allowed.................................178
Operand must be memory location...............................178
Operand size unknown..........................................178
Overlay not loaded............................................178
Path not found................................................178
Path or file not found........................................179
Program has no object or classes..............................179
Program has no symbol table...................................179
Program linked with wrong linker version......................179
Program not found.............................................179
Register cannot be used with this operator....................180
Register or displacement expected.............................180
Run out of space for reystroke macros.........................180
Search expression not found...................................180
Source file ___ not found.....................................180
Symbol not found..............................................181
Symbol table not found........................................181
Syntax error..................................................181
Too many files match wildcard mask............................181
Type EXIT to return to Turbo Debugger.........................181
Unexpected end of line........................................181
Unknown character.............................................182
Unknown record, union or structure name.......................182
Unknown symbol................................................182
Unterminated string...........................................182
Value must be between nn
Value must be between nn and nn...............................182
Value out of range............................................182
TDeb 3.0 #3-3 = 7 =
Video mode not avaliable......................................183
Video mode swithed while flipping pages.......................183
You are not debugging a Window program........................183
Информационные сообщения......................................184
Waiting for handshake from TDREMOTE (Ctrl-Break to quit)......184
TDeb 3.0 #3-3 = 8 =
Глава 17. Турбо отладчик для Windows (TDW)
-----------------------------------------------------------------
Турбо отладчик для Windows (TDW) позволяет отлаживать прик-
ладные программы, написанные для Microsoft Windows версии 3.0 и
старше. Он работает под управлением Windows на той же машине, что
и отлаживаемая программа, и выполняет переключения между собс-
твенными экранами и экранами отлаживаемой прикладной программы,
как это делает Турбо отладчик.
Отладка происходит во многом аналогично отладке с помощью
Турбо отладчика, за исключением того, что здесь вы получаете дос-
туп к информации, являющейся специфичной для Windows, например:
- Сообщения, принимаемые и посылаемые окнами прикладной
программы;
- Глобальная динамически распределяемая область памяти;
- Локальная динамически распределяемая область памяти;
- Полный список модулей (включая динамически компонуемые
библиотеки DLL), загружаемых Windows;
- Отладка динамически компонуемых библиотек (DLL).
Требования для запуска TDW
-----------------------------------------------------------------
Отладчик TDW работает в стандартном или улучшенном режиме
386, что означает необходимость иметь компьютер с процессором как
и как минимум один мегабайт
минимум 80286 или выше, и как минимум один мегабайт памяти.
TDW поддерживает только стандартные графические режимы дисп-
лея: CGA, EGA, VGA, SVGA и монохромную графическую плату
Hercules. Если вы используете необычный драйвер, то прежде чем
запускать Windows и TDW, перейдите на стандартный драйвер. Если
вы попытаетесь использовать при работе с TDW нестандартный драй-
вер, то не сможете переключаться между экранами TDW и прикладной
программы.
Используя DLL с именем TDVIDEO.DLL TDW поддерживает Super
VGA. С TDW распространяется множество DLL, которые поддерживают
различные платы Super VGA (описанные в файле README на дистрибу-
тивной дискете). Чтобы использовать c TDW эти DLL, скопируйте их
в каталог, где находится TDW.EXE, и назовите TDVIDEO.DLL.
Если вы не найдете DLL, поддерживающую плату Super VGA,
свяжитесь с фирмой Borland.
Как и Турбо отладчик, TDW может использовать второй монитор,
подключенный к компьютеру, что дает возможность на одном экране
TDeb 3.0 #3-3 = 9 =
просматривать вывод TDW, а на другом - прикладной программы. Для
этого нужно запустить TDW с параметром командной строки -do или
выполнить утилиту TDINST, установив User Screen Updating в значе-
ние Other display.
Установка TDW
-----------------------------------------------------------------
При установке в системе Турбо отладчика программа установки
помещает файлы, относящиеся к работе в Windows, в тот же каталог,
что и файлы Турбо отладчика. Это файлы:
- TDW.EXE, собственно отладчик TDW;
- TDWHELP.TDH, файлы системы подсказки TDW;
- WRSETUP.EXE, утилита настройки конфигурации для программы
удаленной отладки в Windows WREMOTE;
- WREMOTE.EXE, программа удаленной отладки прикладных прог-
Процесс установки создает пиктограммы для
рамм для Windows. (Удаленная отладка в Windows описана в
Приложении E);
- WINDEBUG.DLL, динамически компонуемая библиотека, необхо-
димая для выполнения TDW и WREMOTE;
- TDDEBUG.386, программа, которую загружает Window для под-
держки прерывания программы по Ctrl-Alt-SysRq и аппаратной
отладки.
Процесс установки создает пиктограммы для TDW, WRSETUP и
WREMOTE и помещает их под группой Windows Applications (приклад-
ные программы для Windows) менеджера программ Windows. Вы можете
запустить одну из этих программ, выбрав соответствующую пиктог-
рамму, как и для любых других прикладных программ Windows.
TDeb 3.0 #3-3 = 10 =
Настройка конфигурации TDW
-----------------------------------------------------------------
Как и в случае работы с Турбо отладчиком, вы можете настро-
ить конфигурацию TDW двумя способами - при помощи параметров ко-
мандной строки или при помощи утилиты TDINST (с параметром ко-
мандной строки -w).
Использование параметров командной строки TDW
-----------------------------------------------------------------
Как и для Турбо отладчика, вы можете установить конфигурацию
TDW, используя различные параметры командной строки, за которыми
может следовать необязательное имя программы со своими собствен-
ными параметрами. Имени программы может предшествовать имя марш-
рута.
Поскольку TDW является программой для Windows, вы вероятно
будете вводить параметры командной строки либо при помощи команды
File¦Run (Файл¦Выполнение) менеджера программ, либо при помощи
команды File¦Properties (Файл¦Свойства) менеджера программ, чтобы
изменить свойства командной строки пиктограммы TDW. Вы также мо-
жете запустить Windows из командной
жете запустить Windows из командной строки DOS и использовать ко-
манду TDW, за которой могут в произвольном порядке следовать па-
раметры командной строки, либо имя программы с параметрами или
без, либо и то, и другое - и все это как аргументы команды
Windows.
Синтаксис командной строки для TDW имеет следующий вид:
TDW [параметры] [имя_программы [аргументы_программы]]
Отладчик TDW имеет меньше параметров командной строки, чем
Турбо отладчик TD. За исключением параметра -t, используемые им
параметры совпадают с параметрами Турбо отладчика, которые расс-
матривались выше.
Ниже приводятся параметры командной строки TDW:
-----------T---------------------------------------------------¬
¦-?, -р ¦ Обращение за подсказкой о параметрах командной¦
¦ ¦ строки TDW. ¦
¦ ¦ ¦
¦-c<файл> ¦ Использование файла конфигурации <файл>. ¦
¦ ¦ ¦
¦-do ¦ Запуск TDW на вторичном дисплее. ¦
¦ ¦ ¦
¦-ds ¦ Обновление экранов путем свопинга (подкачки)¦
¦ ¦ страниц. ¦
¦ ¦ ¦
¦-l ¦ Запуск в режиме Ассемблера. Отладка кода началь-¦
¦ ¦ ной загрузки библиотеки DLL. ¦
TDeb 3.0 #3-3 = 11 =
¦ ¦ ¦
¦-p ¦ Использование "мыши". ¦
¦ ¦ ¦
Один из этих параметров командной
¦-sc ¦ Игнорировать регистр в именах идентификаторов. ¦
¦ ¦ ¦
¦-sdкаталог¦ Установить в качестве каталога с исходными файла-¦
¦ ¦ ми указанный каталог. ¦
¦ ¦ ¦
¦-tкаталог ¦ Установить в качестве начального каталога запус-¦
¦ ¦ ка указанный каталог. ¦
L----------+----------------------------------------------------
Один из этих параметров командной строки, параметр t, досту-
пен только в TDW. Этот параметр изменяет начальный каталог запус-
ка TDW, т.е. каталог, в котором TDW ищет файл конфигурации и фай-
лы .EXE, не заданные с полным маршрутом. Синтаксис этой парамет-
ра:
-tимя_каталога
Этот параметр позволяет установить только один начальный ка-
талог запуска. Если ввести с помощью одного параметра несколько
таких каталогов, то TDW все их игнорирует. Если указать несколько
параметров -t с разными каталогами, то TDW использует последний
из них.
TDeb 3.0 #3-3 = 12 =
Использование TDINST для TDW
-----------------------------------------------------------------
Чтобы воспользоваться программой TDINST для TDW, запустите
TDINST с параметром командной строки -w. TDINST для TDW работает
аналогично TDINST для Турбо отладчика, за исключением того, что
файл конфигурации по умолчанию будет называться TDCONFIG.TDW, и
доступно меньше параметров. (См. список параметров командной
строки TDW в предыдущем разделе).
Описание использования TDINST см. в Приложении D.
Использование TDW
-----------------------------------------------------------------
При запуске TDW он появляется
При запуске TDW он появляется в полноэкранном символьном ре-
жиме DOS, а не в окне. Несмотря на такой внешний вид, TDW - это
прикладная программа Windows и работать может только в Windows.
В отличие от других работающих в Windows программ, вы не мо-
жете использовать оперативные клавиши Windows (типа Alt-Esc или
Ctrl-Esc) для выхода из экрана TDW. Однако, если отлаживаемая
прикладная программа является активной (курсор активен в одном из
ее окон), вы можете использовать эти клавиши или "мышь" для пе-
реключения на другие программы.
Отладка в TDW во многом похожа на отладку в Турбо отладчике,
за исключением нескольких свойств Турбо отладчика, которые рабо-
тают иначе, и нескольких дополнительных свойств, помогающих при-
отладке программ для Windows.
Различия между TDW и Турбо отладчиком
-----------------------------------------------------------------
Различными являются следующие свойства:
- Переключение из вашей прикладной программы в TDW выполня-
ется при помощи комбинации клавиш Ctrl-Alt-SysRq. Эта опе-
рация аналогична использованию Ctrl-Break для переключения
из прикладной программы для DOS в Турбо отладчик, за иск-
лючением того, что при этом прикладная программа для DOS
завершается, а для Windows - только приостанавливается.
- Параметр командной строки -l не только позволяет отлажи-
вать начальный код загрузки вашей прикладной программы, а
также позволяет отлаживать ассемблерный начальной код заг-
рузки любой DLL, компонуемой с вашей программой.
- Если это возможно, выполните вашу программу до ее нормаль-
ного конца или используйте команду System для выхода из
нее до выхода из TDW или загрузки другой программы для от-
Нештатный выход из прикладной программы
ладки. Нештатный выход из прикладной программы для Windows
может привести к тому, что не будут освобождены ее ресур-
TDeb 3.0 #3-3 = 13 =
сы, что в свою очередь может вызвать проблемы у TDW или
другой прикладной программы.
- Запись нажатий клавиш не выполняется.
- Нельзя отлаживать драйверы устройств или резидентные прог-
раммы.
- Не поддерживается аппаратная отладка. (Если хотите, вы мо-
жете оставить устройство TDH386.SYS в CONFIG.SYS. Это не
помешает работе Windows или TDW).
- Следующие команды меню File недоступны, поскольку TDW ра-
ботает под управлением Windows:
* DOS Shell, т.к. оболочка отсутствует;
* Resident, т.к. TDW не может по завершении остаться
резидентным;
* Table Relocate, поскольку вы не можете установить ба-
зовый сегмент таблицы символических имен.
TDeb 3.0 #3-3 = 14 =
Новые средства TDW
-----------------------------------------------------------------
Новые свойства, поддерживаемые отладчиком программ для
Windows:
- Окно просмотра Windows Messages (Сообщения Windows), пока-
зывающее сообщения, передаваемые окнам в вашей программе.
- В окне регистрации Log вы имеете возможность выводить сле-
дующие три типа данных:
* Сегменты данных, расположенные в локальной динамичес-
ки распределяемой области вашей прикладной программы;
* Сегменты данных, расположенные в глобальной динами-
чески распределяемой области;
* Полный список модулей, составляющих программу, вклю-
чая динамически компонуемые библиотеки (DLL);
Приведение типа выражений от логических
* Приведение типа выражений от логических номеров памя-
ти к дальним указателям.
- Отладка динамически компонуемых библиотек (DLL).
- Параметр командной строки -t, позволяющий устанавливать
начальный каталог запуска TDW, чтобы можно было использо-
вать файл конфигурации или файлы .EXE из этого каталога.
Регистрация сообщений Windows
-----------------------------------------------------------------
Для трассирования передаваемых в окна вашей прикладной прог-
раммы сообщений выберите команду View¦Windows Messages
(Обзор¦Сообщения Windows), чтобы открыть окно Windows Messages.
Это окно показывает сообщения, которые Windows посылает в одно
или более окон вашей программы.
TDeb 3.0 #3-3 = 15 =
Окно Windows Messages (Сообщения Windows) состоит из трех
областей: области выбора окна Window Selection (верхняя левая об-
ласть), области класса сообщений Message Class (верхняя правая
область) и области сообщений Messages (нижняя область). Сообщения
показывает область Messages.
г=[*]===Windows messages===================3======[ ][ ]¬
¦Windowproc wndproc-------¦Log-message-WM-PAINT---------¦
¦ ¦ ¦
¦ ¦ ¦
¦ ¦ ¦
¦--------------------------<--------------------------->¦
¦Hwnd:2214 wParam:0000 lParam:000000000 (000f) WM PAINT ¦
L=======================================================-
Рис. 17.1 Окно Windows Messages
TDeb 3.0 #3-3 = 16 =
Выбор окна
-----------------------------------------------------------------
Прежде чем вы сможете регистрировать
---------------¬
¦ Add... ¦ Добавить
¦ Remove ¦ Удалить
¦ Delete All ¦ Удалить все
L---------------
Прежде чем вы сможете регистрировать сообщения, вы должны
сначала указать, для которого окна будут регистрироваться сообще-
ния. Это выполняется в верхней левой области, области выбора окна
Window Selection. Локальное меню этой области (активируемое нажа-
тием клавиш Alt-F10) позволяет добавить выбранное окно, удалить
выбранное окно или удалить все выбранные окна.
Добавление выбранного окна
-----------------------------------------------------------------
Для того, чтобы добавить выбранное окно, вы можете либо выб-
рать команду Add (Добавление) из локального меню области Window
Selection (Выбор окна), либо просто начать ввод в области. В том
и другом случае вы получите окно диалога:
Вы можете в этом окне ввести либо имя подпрограммы, которая
обрабатывает сообщения для окна (выбрав "кнопку" Window Proc),
либо значение логического номера (выбрав "кнопку" Handle). Введи-
те столько имен подпрограмм или логических номеров, сколько нужно
для трассировки сообщений для ваших окон.
г[*]==Add window or handle to watch======¬
¦ ¦
¦ Window identifier ¦
¦ ----------------- OK ¦
¦ ------ ¦
¦ Cancel ¦
¦ Identify by ------ ¦
¦ (*) Window proc Help ¦
¦ ( ) Handle ------ ¦
¦ ¦
Add window or handle to
L========================================-
Рис. 17.2 Диалоговое окно Add Window
Add window or handle to watch - добавить окно или описатель
для просмотра; Window identifier - идентификатор окна; Identify
by - идентификация по...; Window proc - процедура окна; Handle -
описатель; OK - нормально; Cancel - отмена; Help - справка.
Примечание: Ввод в этом окне первого значения также ус-
танавливает класс сообщений в "Log all messages" ("Регистра-
ция всех сообщений").
TDeb 3.0 #3-3 = 17 =
Легче указать окно по имени подпрограммы, обрабатывающей его
сообщения (например, WndProc), поскольку вы можете ввести имя
подпрограммы в любой момент после загрузки вашей программы.
Если вы предпочитаете использовать имя переменной с логичес-
ким номером, вы должны сначала перейти по программе к строке, где
этой переменной присваивается логический номер. (Для пошагового
перемещения по программе служат клавиши F7 или F8). Если вы пыта-
етесь ввести имя переменной до этого оператора присваивания, TDW
не сможет принимать сообщения для этого логического номера.
Выбор окна для прикладной программы, использующей ObjectWindows
-----------------------------------------------------------------
Если вы отлаживаете прикладную программу, использующую
ObjectWindows, и выбираете команду View¦Windows Messages (Об-
зор¦Сообщения Windows), то по умолчанию выводится диалоговое окно
Windows Messages (Сообщения Windows), показанное на Рис. 17.1.
Для стандартных программ Windows и программ, использующих
ObjectWindows, это окно работает одинаково, только имя процедуры
Windows вы использовать не сможете. Вместо этого для того окна,
сообщения которого вы хотите регистрировать или по сообщениям
Перед тем, как вы сможете
которого хотите установить прерывания, нужно использовать описа-
тели окна.
TDeb 3.0 #3-3 = 18 =
Получение описателя окна
-----------------------------------------------------------------
Перед тем, как вы сможете использовать описатель объекта ок-
на, нужно выполнить программу и пройти то место, где он инициали-
зируется. Для этого можно использовать несколько методов.
- Простейший способ состоит в запуске вашей программы и
возврате в TDW по Ctrl-Alt-SysRq.
- Другая возможность заключается в задании точки останова в
подпрограмме обработки сообщений (примером которой может
быть подпрограмма, обрабатывающая сообщения WM_MOUSEMOVE),
и последующем выполнении в окне действия, которое приведет
к срабатыванию точки останова (например, перемещения "мы-
ши").
- Если основные проблемы у вам заключаются в самом окне (та-
кие, как невосстановимая ошибка прикладной программы, воз-
никающая при первоначальном выводе окна), получать указа-
тель окна придется более длинным путем.
Так как описатель инициализируется функцией ObjectWindows
CreateWindow, и данная функция выполняется после того, как
вы инициализируете окно, то нужно переопределить в клас-
се окна эту функцию и для получения описателя установить
на ней точку прерывания.
Например, в следующем исходном коде данная функция переоп-
ределяется для класса окна ScribbleWindow программы
TDODEMO:
void ScribbleWindow()
{
TWindow::SetupWindow();
}
Далее позиционируйте курсор на строке после оператора ини-
циализации и нажмите F4 для выполнения программы до той
После этого вы можете вставлять
точки, где инициализируется описатель окна, диалогового
окна или управляющего элемента. В данном примере нужно по-
зиционировать курсор на закрывающей квадратной скобке
функции SetupWindow.
После того, как описатель инициализирован и вы вернулись в
TDW, выбрав команду Data¦Inspect (Данные¦Проверка) и введя имя
соответствующего объекта окна (в TDODEMO
WinMain#MyApp.MainWindow), можно получить описатель окна. Найдите
элемент данных HWindow и скопируйте его в окно Clipboard (нажав
клавиши Shift-F3). После этого вы можете вставлять содержимое
HWindow в качестве описателя в диалоговом окне Add (Добавление)
или в верхней левой области окна Window Messages (нажмите клавиши
Shift-F4 в текстовом поле ввода диалогового окна).
TDeb 3.0 #3-3 = 19 =
Задание окна с разрешенной поддержкой ObnjectWindows
-----------------------------------------------------------------
Если вы запускаете программу TDINST с параметром командной
строки -w, то можете включить в TDW поддержку сообщений окна для
ObjectWindows. Когда данный параметр включен, вы можете использо-
вать имена оконных объектов, как если бы они описывались в вашей
прикладной программе.
При выборе команды View¦Windows Messages (Обзор¦Сообщения
окна) при включенном параметре OWL на экран выводится следующий
экран:
г=[*]===OWL Windows Messages===============3======[ ][ ]¬
¦Window-object-11c5:006e--¦Log-all-messages-------------¦
¦ ¦ ¦
¦ ¦ ¦
¦ ¦ ¦
¦-------------------------+<--------------------------->¦
Окно Windows Messages с
¦Hwnd:2214 wParam:0000 lParam:000000000 (000f) WM PAINT ¦
¦ ¦
¦ ¦
¦ ¦
L=======================================================-
Рис. 11. 1 Окно Windows Messages с разрешенной поддержкой
ObjectWindows
--------------¬
¦ Add... ¦ Добавить
¦ Remove ¦ Отменить
¦ Delete All ¦ Удалить все
L--------------
Перед тем, как вы сможете регистрировать сообщения, нужно
сначала указать, для какого окна регистрируются сообщения. Это
можно сделать в левой верхней области - области выбора окна. Ло-
кальное меню области (которое активизируются с помощью клавиш Alt
-F10) позволяет вам добавить окно, удалить окно, или отменить все
выбранные окна.
Добавление выбора окна с разрешенной поддержкой ObjectWindows
-----------------------------------------------------------------
Перед тем, как вы сможете использовать объект окна, нужно
выполнить программу и пройти то место, где он инициализируется.
Обычно объект инициализируется в операторе, аналогичном следующе-
му оператору в определении функции в TDODEMO:
void CScribbleAllocation::InitMainWindow()
{
MainWindow = new ScribbleWindow(NULL, Name);
TDeb 3.0 #3-3 = 20 =
}
Позиционируйте курсор на строке после оператора инициализа-
ции и нажмите клавишу F4 для выполнения программы до той точки,
где инициализируется окно, диалоговое окно или управляющий эле-
мент. В данном примере нужно позиционировать курсор на закрыва-
ющей фигурной скобке функции.
После инициализации оконного объекта вы
После инициализации оконного объекта вы можете добавить его
в область выбора окна. Для добавления выбранного окна вы можете
либо выбрать команду Add (Добавление) локального меню области вы-
бора окна, либо начать ввод в этом окне имени объекта. Любой из
методов выводит диалоговое окно Add Window (Добавление окна).
Если вы не находитесь в той подпрограмме, где описывается
объект, для доступа к нему требуется переопределение области
действия. Например, в TDODEMO MainWindow является элементом MyApp
(так как MyApp представляет собой тип CScribbleApplication, кото-
рый является производным от TApplication, а TApplication содержит
элемент данных с именем MainWindow). Однако, поскольку MyApp опи-
сывается в функции WinMain, то если вы не находитесь в этой фу-
нкции, доступа к MyApp у вас нет. Таким образом, переопределением
области действия, которое обеспечивает работу в данном модуле,
является WinMain#MyApp.MainWindow.
TDeb 3.0 #3-3 = 21 =
г[*]=Add window or handle to watch========¬
¦ ¦
¦ Window identifiers ¦
¦ --------------------------- ¦
¦ OK ¦
¦ ------- ¦
¦ ¦
¦ Cancel ¦
¦ Identified by ------- ¦
¦ (.) Window object ¦
¦ ( ) Handle Help ¦
¦ ------- ¦
¦ ¦
L=========================================-