Рубрики: КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

про компютерное железо, документация, языки программирования

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

Данное поле ввода позволяет вам задать объем памяти, которая
резервируется для загрузки «вручную» таблиц идентификаторов.

Remote Type (Тип удаленной отладки)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Этот набор селективных переключателей тип удаленной отладки,
которую вы хотите выполнять: отсутствует (по умолчанию), удален-
ная связь черед последовательный порт или через сеть.

Предупреждение: Обычно «кнопка» None остается в состоянии
«выключено», поскольку активизация одного из переключателей уда-
ленной отладки приводит к тому, что Турбо отладчик будет каждый
раз запускать удаленную связь.

Remote Link Port (Порт удаленной связи)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Позволяет выбрать для удаленной связи порт COM1 или COM2.

Link Speed (Cкорость коммуникаций)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Позволяет выбрать одну из трех скоростей передачи, которая
может использоваться для удаленной связи (9600, 19200, 38400 или
115000 бод).

Network Local Name (Локальное имя в сети)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Данный текстовый параметр позволяет вам задать имя локальной
машины (машины, на которой работает TD). По умолчанию это
«LOCAL».

Network Remote Name (Удаленное имя в сети)

TDeb 3.0 #3-3 = 127 =

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Данный текстовый параметр позволяет вам задать имя удаленной
машины (машины, на которой работает TDREMOTE или WREMOTE). По
умолчанию это «LOCAL».

TDeb 3.0 #3-3 = 128 =

Задание режимов вывода
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДДї
По умолчанию і Default і
Цветной і Color і
Черно-белый і Black and white і
Монохромный і Monochrome і
На жидких кристаллах і LCD і
АДДДДДДДДДДДДДДДДДДДДДДДДЩ

Выбор команды Mode for Display (Режим дисплея) основного ме-
ню открывает меню, с помощью которого вы можете выбрать режим для
вашей системы.

Default Турбо отладчик выбирает тот тип графичес-
(По умолчанию) кого адаптера, который имеется в вашей
системе, и устанавливает соответствующим
образом режим дисплея.

Color (Цветной) Если у вас имеется адаптер EGA, VGA, CGA,
MCGA или графический адаптер 8514, и вы
выбираете его по умолчанию, то экран бу-
дет работать в цветном режиме.

Black and White Если у вас имеется адаптер EGA, VGA, CGA,
(Черно-белый) MCGA или графический адаптер 8514, и вы
выбираете его по умолчанию, то экран бу-
дет работать в черно-белом режиме.

Monochrome Выберите данный параметр, если вы исполь-
(Монохромный) зуете цветной монитор и адаптером
Hercules или монохромным адаптером, кото-
рый работает только в текстовом режиме.

LCD (Жидкокристал- Выберите данный параметр, если вы работа-
лический) ете на жидкокристаллическом дисплее.

TDeb 3.0 #3-3 = 129 =

Параметры командной строки и их эквиваленты в программе TDINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПараметр і Команда меню TDINST іДиалоговые переключатели и і
і і і параметры і
ГДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Display Display Options і
і і
і -do (.) Other Display і
і -dp (.) Flip Pages і
і -ds (.) Swap і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -i [X] Change Process ID і
і -i- [ ] Change Process ID і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіInput and Prompting User Input and Prompting і
і і
і -k [X] Keystroke Recording і
і -k- [ ] Keystroke Recording і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і Display Display Options і
і і
і -l (.) Assembler і
і -l- ( ) Source і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіInput and Prompting User input and Prompting і
і і
і -p [X] Mouse Enabled і
і -p- [ ] Mouse Enabled і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -r (.) Serial і
і -r- (.) None і

TDeb 3.0 #3-3 = 130 =

ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -rn/;r (.) Network і
і Network Local Name і
і Network Remote Name і
і і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -rp1 (.) COM1 і
і -rp2 (.) COM2 і
і і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -rs1 (.) 9600 baud і
і -rs2 (.) 19200 і
і -rs3 (.) 38400 і
і -rs3 (.) 115000 і
і і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіSource Debugging Directories і
і і
і -sc [X] Ignore Symbol Case і
і -sc- [ ] Ignore Symbol Case і
і і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіDirectories Directories і
і і
і -sd Source Directories і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і OptionsіMiscellaneous Miscellaneous Options і
і і
і -sm Spare Symbol Memory і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і
і Display Display Options і
і і
і -vn [ ] Permit 43/50 Lines і
і -vn- [X] Permit 43/50 Lines і
і -vg [X] Full Graphics Save і
і -vg- [X] Full Graphics Save і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

TDeb 3.0 #3-3 = 131 =

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

Полный список всех параметров командной строки утилиты
TDINST можно получить, если вызвать ее с параметром -h.

В процессе работы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДї
Сохранить файл конфигурации і Save configuration file…і
Модифицировать TD.EXE і Modify TD.EXE і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

После того, как вы установите все параметры Турбо отладчика
так, как хотите, выберите из основного меню команду Save (Сохра-
нение), чтобы определить, как вы будете их сохранять.

Сохранение файла конфигурации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

При выборе команду Save configuration file (Сохранение файла
конфигурации) выводится диалоговое окно, инициализированное име-
нем файла конфигурации, используемым по умолчанию (TDCONFIG.TD).
Вы можете использовать данное имя, нажав клавишу Enter, или за-
дать другое имя файла конфигурации. Если вы зададите другое имя,
то можете загружать этот файл конфигурации с помощью параметра
командной строки Турбо отладчика -с (при его запуске). Например:

td -cmycfg myprog

Вы можете также использовать для загрузки файла конфигурации
после того, как загрузите отладчик, команду OptionsіRestore
Configuration (ПараметрыіВосстановление конфигурации).

Модификация файла TD.EXE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Если вы выберите команду Modify TD.EXE (Модифицировать
TD.EXE), то внесенные вами в конфигурацию изменения сохранятся
непосредственно в выполняемом файле Турбо отладчика TD.EXE (или
TDW.EXE если вы запускали TDINST с параметром -w). При следующем
запуске Турбо отладчика эти изменения будут использованы по умол-
чанию.

В любое время, скопировав файл TD.EXE с дистрибутивного дис-
ка, вы можете вернуться к стандартной конфигурации.

TDeb 3.0 #3-3 = 132 =

Выход из программы TDINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда вы закончите вносить изменения в конфигурацию, возвра-
титесь в основное меню, нажав нужное число раз клавишу Esc. Затем
выберите команду Quit (Выход).

TDeb 3.0 #3-3 = 133 =

Приложение E. Удаленная отладка
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Удаленная отладка означает с соответствии со своим названием
следующее: вы запускаете Турбо отладчик на одном компьютере, а
отлаживаемую программу — на другом. Две системы могут соединяться
через последовательный порт или через локальную сеть LAN, совмес-
тимую с NETBIOS.

Удаленную отладку полезно использовать в следующих ситуаци-
ях:

— Когда вашей программе требуется много памяти, и вы не мо-
жете запускать программу и Турбо отладчик на одном компь-
ютере. В этом случае вы получаете сообщение «Not enough
memory» («Не хватает памяти»).

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

— Когда вам нужно отладить специальные программы (резидент-
ные программы или драйверы устройств).

— Когда вы отлаживаете программу Windows.

В случае отладки прикладной программы Window у вас есть вы-
бор: вы можете либо запустить на одной машине программу и Турбо
отладчик для Windows (TDW), либо запустить Windows, утилиту
WREMOTE и прикладную программу на одной машине, а Турбо отладчик
— на другой.

Хотя существует много причин, по которым желательно отлажи-
вать программу с помощью двух систем, при разработке прикладной
программы Windows преимущества этого становятся еще более очевид-
ны:

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

При использовании удаленной отладки вы можете одновременно
видеть экран прикладной программы и экран Турбо отладчика.
(То же результат можно получить, если к одной системе у
вас присоединено два монитора.)

— Программа WREMOTE использует значительно меньше памяти,
чем Турбо отладчик, поэтому поведение программы будет зна-
чительно ближе к нормальному режиму ее работы (без фоновой
загрузки отладчика).

TDeb 3.0 #3-3 = 134 =

Перед тем как прибегать к удаленной отладке убедитесь, что
Турбо отладчик использует преимущества работы с установленной в
вашей системе расширенной памятью EMS. Управлять использованием в
Турбо отладчике EMS для загрузки в нее таблицы идентификаторов
программы можно с помощью утилиты TDINST.

Требования к программному и аппаратному обеспечению
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Для сеанса удаленной отладки вы можете выбрать соединение
через последовательный порт или через LAN (локальную сеть). В
этих случаях используются разные аппаратные средства, однако
должны соблюдаться следующие общие требования:

— рабочая система с памятью, достаточной для загрузки Турбо
отладчика (локальная система);

— другой компьютер РС (удаленная система), имеющий достаточ-
ный для отлаживаемых программ DOS и TDREMOTE объем памяти
(или для отлаживаемой программы Windows и WREMOTE).

Если вы собираетесь отлаживать прикладную программу
Windows, то на удаленной машине должна быть возможность
работы в защищенном режиме (это означает использование
процессора 80286 и старше). Требуемый объем памяти зависит
от режима, в котором выполняется Windows, но не должен
быть менее 1Мб.

При соединении через последовательный порт вам потребуется
соединяющий две системы кабель. Убедитесь, что кабель, который вы
используете для соединения двух систем, подключен правильно. Он
должен по крайней мере содержать линии для приема и передачи (ли-
нии 2 и 3 на 25-пиновом кабеле).

Для соединения через LAN вам потребуется работающее с LAN
программное обеспечение, совместимое с Novell Netware (версии IPX
и NETBIOS 3.0 или старше).

Перед загрузкой Турбо отладчика и WREMOTE на обеих системах
следует загрузить NETBIOS. Это относится как к обычной отладки
программы DOS, как и к отладке программы Windows.

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

Для отладки прикладной программы DOS вы должны выполнять
TDREMOTE и прикладную программу на одной машине, а Турбо отладчик
на другой. Здесь и далее машина, на которой работают TDREMOTE и
отлаживаемая прикладная программа, будет называться удаленной ма-
шиной, а машина, на которой работает Турбо отладчик, будет назы-
ваться локальной машиной.

TDeb 3.0 #3-3 = 135 =

Установка удаленной системы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Скопируйте на удаленную систему драйвер удаленной отладки
TDREMOTE.EXE. На удаленную систему также необходимо поместить все
файлы, которые требуются для отлаживаемой программы. К ним отно-
сятся входные файлы данных, файлы конфигурации, файлы подсказки
и т.д.

Запись файлов на удаленную систему можно осуществить либо с
помощью дискет, либо с помощью утилиты пересылки файлов TDRF,
описанной в документации на дисках.

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

Примечание: TDRF описывается в поставляемых файлах до-
кументации.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

чтобы получить представление, как она работает. Вы можете исполь-
зовать для запуска TDODEMO.EXE команду FileіRun (ФайліВыполнение)
менеджера программ или добавить ее к программной группе в качест-
ве пиктограммы.

Примечание: При отсутствии файлов .EXE для файлов
TDODEMO и TDODEMOB вам потребуется открыть их файлы проектов
и перекомпилировать эти файлы с включением отладочной инфор-
мации.

О программе
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

TDODEMOB — это программа, написанная с использованием
ObjectWindows, позволяющая рисовать на экране различными цветами
с помощью «мыши». Когда вы нажимаете левую кнопку «мыши» и пере-
мещаете «мышь», то программа рисует на экране линию. Нажав правую
кнопку «мыши», вы можете очистить окно. Программа TDODEMO имеет
строку меню, которая позволяет вам выбрать один из 4 цветов: Red
(красный), Green (зеленый), Blue (голубой) или Black (черный).

Вы можете рисовать, нажимая кнопку «мыши», перемещая «мышь»
и освобождая кнопку «мыши». Программа легко выполняет эту задачу
с помощью библиотеки ObjectWindows и динамических виртуальных ме-
тодов. Динамический виртуальный метод — это метод с присвоенным
ему числовым идентификатором.

Поскольку Borland C++ определяет имена сообщений Windows,
как числовые константы, вы можете использовать номера сообщений
Windows в качестве идентификатора динамического метода. При этом
ObjectWindows может вызывать данный метод, когда окно, для кото-
рого объявлен метод, получает совпадающее с идентификатором мето-
да сообщение. Если нет метода, идентификатор которого совпадает с
идентификатором метода, ObjectWindows вызывает используемую по
умолчанию процедуру окна.

Например, чтобы создать метод, который отвечает на сообщения
WM_MOUSEMOVE, вы можете определить метод в объекте окна, который
выглядит следующим образом:

TDeb 3.0 #3-3 = 64 =

procedure WMMouseMove(var Msg: TMessage); virtual WM_MOUSE;

Как вы можете видеть, идентификатор WM_MOUSEMOVE можно при-
соединить к процедуре с помощью оператора virtual , который непосредственно следует за описанием процедуры.

Параметры процедуры окна Windows wParam и lParam содержит
тип TMessage. Эти параметры часто содержат дополнительную инфор-
мацию о сообщении, например, где позиционируется «мышь».

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

Определение оконного типа ScribbleWindow
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Тип ScribbleWindow определяется следующим образом:

class ScribbleWindow : public TWindow
{
public:
HDC HandleDC; // вывод содержимого для рисования
BOOL ButtonDown; // флаг левой кнопки
HPEN ThePen; // перо, которое используется для
// рисования цветом

ScribbleWindow(PTWindowObject AParent, LPSTR ATitle);
-ScribbleWindow();
void GetWindowClass(WNDCLASS &AWndClass);

virtual void WMLButtonDown(RTMessage
Msg)=[WN_First+WM_LBUTTONDOWN];
virtual void WMLButtonUp(RTMessage MSG)=(WM_FIRST+
WM_LBUTTONUP);
virtual void WMLMouseMove(RTMessage MSG)=(WM_FIRST+
WM_MOUSEMOVE);
virtual void WMLButtonDown(RTMessage MSG)=(WM_FIRST+
WM_LBUTTONDOWN);
virtual void SelectRedPen(RTMessage Msg)=(CM_FIRST+
CM_RED);
virtual void SelectGreenPen(RTMessage Msg)=(CM_FIRST+
CM_GREEN);
virtual void SelectBluePen(RTMessage Msg)=(CM_FIRST+
CM_BLUE);
virtual void SelectBlackPen(RTMessage Msg)=(CM_FIRST+
CM_BLACK);
virtual void SetupWindow();
};

TDeb 3.0 #3-3 = 65 =

Класс ScribbleWindow определяет определяет объект окна, ко-
торый отвечает на следующий ввод пользователя:

— перемещение «мыши»;

— нажатие и освобождение левой кнопки «мыши»;

— нажатие правой кнопки «мыши»;

— цвет и позицию пера.

Имеются три экземпляра переменных — HandleDC, ThePen и
ButtonDown, которые содержат класс устройства, текущее перо, ко-
торым рисует пользователь, и состояние кнопки «мыши» соответс-
твенно.

TDeb 3.0 #3-3 = 66 =

Конструктор ScribbleWindow
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Конструктор ScribbleWindow присоединяет меню к программе и
инициализирует элемент данных ButtonDown значением FALSE, а
ThePen — значением CM_BLACK.

GetWindowClass
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Функция-элемент GetWindowClass вызывает стандартную функцию
TWindow CegWindowClass устанавливает окно таким образом, что оно
ведет себя аналогично любому другому окну TWindow, а затем иници-
ализирует пиктограмму программы.

WMRButtonDown
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда пользователь нажимает в окне ColorScribble правую
кнопку «мыши» и собирается рисовать, окно получает сообщение
WM_LBUTTONDOWN, которое приводит к тому, что ObjectWindows вызы-
вает подпрограмму WMLButtonDown (так как она имеет идентификатор
WM_FIRST+WM_LBUTTONDOWN). Подпрограмм WMLButtonDown перемещает
перо в текущую позицию «мыши» и устанавливает переменную
ButtonDown, чтобы указать, что кнопка нажата, а затем выбирает
ThePen в текущий контекст устройства. В Windows имеются также до-
полнительные вызовы данной функции, о чем будет рассказано ниже.

WMLButtonUp
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда пользователь заканчивает рисование и освобождает кноп-
ку «мыши», окно получает сообщение WM_LBUTTONUP, которое в свою
очередь приводит к тому, что ObjectWindows вызывает функцию
WMLButtonUp. Программа присваивает переменной ButtonDown значение
False и освобождает класс устройства, связанный с данным окном.

WMRButtonDown
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда пользователь нажимает правую кнопку «мыши», чтобы
очистить экран, ObjectWindows вызывает функцию WMRButtonDown, ко-
торая, в свою очередь, вызывает функцию Windows UpdateWindow. Вы-
зов данной функции предназначен для очистки окна.

WMMouseMove
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда пользователь начинает перемещать курсор по окну, окно
получает сообщение WM_MOUSEMOVE, которое приводит к тому, что
ObjectWindows вызывает функцию WMMouseMove. Если пользователь на-
жал левую кнопку «мыши», то программа рисует при каждом перемеще-
нии «мыши» линию. Если пользователь не нажимает кнопку «мыши», то

TDeb 3.0 #3-3 = 67 =

ничего не происходит.

Подпрограммы цвета пера
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

TDeb 3.0 #3-3 = 68 =

Создание прикладной программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Чтобы создать прикладную программу, которая использует окно
окно ColorScribble, необходимо создать класс на основе класса
ObjectWindow в TApplication. Назначение этого класса (класса
CSribbleApplication) состоит в следующем:

— Переопределении функции InitMainWindow, благодаря чему
прикладная программа сможет создавать основное окно со
свойствами окна CSribbleWindows.

— Обеспечении объектного типа MyApp, который используется

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

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

Примечание: MainWindow, используемое для задания преры-
вания по сообщению окна, которое описывается в данной главе
ниже, является элементом MyApp.

Теперь вы знаете как работает программа и можете начать ее
отлаживать.

Отладка программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Если вы еще этого не сделали, запустите отладчик TWD под
Windows, загрузите программу TDODEMOB.CPP затем нажмите клавишу
F9 для запуска демонстрационной программы. Вы можете перемещать
«мышь» и даже выбирать команды меню, но когда вы нажимаете кнопку
«мыши» и начинаете перемещать «мышь», вы увидите, что происходит
сбой программы и она возвращает управление в TDW с сообщением об
ошибке «Exception 13» («Исключительная ситуация 13»).

Примечание: TDW выводит сообщение «Exception 13», когда
ваша программа приводит к невосстановимой ошибке.

Выявление первой ошибки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Когда вы нажимаете клавишу Esc и очищаете окно сообщений,
TDW оставляет вас с окне CPU (ЦП). Данное окно выводится, так как
во время сбоя ваша программа выполняет код Windows. Так как вы не
вернулись в окно Module (Модуль), то отсутствует удобный маркер,
который отмечал бы место, в котором обращение вашей программы к
Windows вызвало невосстановимую ошибку.

Перед тем как продолжить, нажмите клавиши Alt-F3, чтобы зак-
рыть окно CPU (в основном вы будете работать в окно Module).

Поиск функции, которая вызывает Windows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

TDeb 3.0 #3-3 = 69 =

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

Для выполнения трассировки стека выберите с помощью команды
ViewіStack (ОбзоріСтек) окно Stack (Стек) и прокрутите вниз спи-
сок шестнадцатиричных инструкций, пока вы не дойдете до строки,
указывающей подпрограмму вашей программы (имя подпрограммы вы
увидите в коде ASCII). Эта строка находится в так называемом яд-
ре Windows.

Как можно видеть в окне Stack, подпрограммой, которую нужно
рассмотреть, в самом деле является подпрограмма WMLButtonDown.
Чтобы перейти к данной подпрограмме в окне Module, сначала щелк-
ните в этом окне кнопкой «мыши». Затем нажмите клавиши Ctrl-S,
наберите WMLButtonDowm и нажмите для поиска этой подпрограммы
клавишу Enter. Если вы увидите сообщение «Search expression not
found» («Искомое выражение не найдено»), перейдите к началу файла
и клавиши Ctrl-N, чтобы снова выполнить поиск (в TDW вы можете
выполнять поиск только от текущей позиции курсора до конца фай-
ла). Возможно, перед тем как вы найдете функцию, вам потребуется
несколько раз нажать Ctrl-N.

TDeb 3.0 #3-3 = 70 =

Отладка функции WMLButtonDown
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Функция WMLButtonDown воспринимает в качестве параметра пе-
ременную типа RTMessage и выделяет из этого сообщения позицию
«мыши». Затем она вызывает функции Windows MoveTo и SelectObject
для позиционирования пера в окне и выбора текущего инструмента
рисования.

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

При расположении курсора на строке WMLButtonDown перезагру-
зите программу TDODEMOB, нажав клавиши Ctrl-F2, затем нажмите
клавишу F4, чтобы выполнить программу до этой точки. Команда вы
увидите окно ColorScribble, нажмите левую кнопку «мыши», чтобы
программа вернулась в TDW. (Чтобы получить от Windows сообщения
по событию от «мыши», возможно придется нажать клавишу несколько
раз.) На этот раз невосстановимой ошибки не возникает (по крайней
мере пока), поскольку поскольку все, что пока выполнялось, это
вызов Windows функции WMLButtonUp программы TDODEMOB. Отладчик
TDW возвращает вас к первой строке этой функции.

Начните нажимать клавишу F7 для пошагового выполнения прог-
раммы. Когда вы нажмете F7 на вызове MoveTo, то увидите окно со-
общений, в котором выводится «Exeption 13». Вероятно, проблема в
вызове MoveTo.

Отладка MoveTo
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Функция MoveTo работает с пером и текущими координатами кур-
сора x и y. Координаты извлекаются из сообщения Msg, которое при-
ходит от Windows. Если программа не извлекает неверную часть это-
го сообщения (а это не так), то с этими параметрами должно быть
все в порядке.

Местом ошибки должен быть HandleDC — контекст описателя уст-
ройства пера.

В этой точке, поскольку вы имеете две невосстановимых ошиб-
ки, наиболее надежным способом будет выход в TDW и закрытие перед
дальнейшей работой Windows.

Исправление ошибки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Если причиной невосстановимой ошибки является HandleDC, то
либо описатель (контекста устройства) установлен неверно, либо не

TDeb 3.0 #3-3 = 71 =

устанавливался вовсе. На самом деле он не устанавливался. Прог-
рамма должна инициализировать контекст дисплея с помощью следую-
щего вызова Windows:

HandleDC = GetDC(HWindow);

В приведенном ниже исходном коде показан метод
WMLButtonDown с добавленным оператором инициализации контекста.

void ScribbleWindow::WMLButtonDown(RTMessage Msg)
{
if ( !ButtonDown )
{
ButtonDown = True; // отметить кнопку «мыши»,
// так что при перемещении «мыши»
// с нажатой кнопкой будет
// рисоваться линия
HandleDC = GetDC(HWindow); // создать контекст вывода
для рисования при нажатой
кнопке «мыши» }
MoveTo(HandleDC, Msg.LP.Lo, Msg.LP.Hi);
// переместить точку рисования
// в точку нажатия кнопки «мыши»
SelectObject(HandleDC, ThePen);
// выбрать перо для контекста
// устройства
}
}

TDeb 3.0 #3-3 = 72 =

Проверка исправлений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

В Borland C++ добавьте в ScribbleWindow::WMLButtonUp опера-
тор инициализации контекста. Далее скомпилируйте проект с включе-
нием отладочной информации (выбрав команду (CompileіBuild All)
(КомпиляторіПолное построение)).

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

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

Поиск ошибки назначения цвета пера
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Наиболее вероятным местом этой ошибки является функция
SCribbleWindow, который создает цвет пера SelectBlackPen. Выйдите
из ColorScribble, затем для сброса программы нажмите клавиши
CtrlF2. Установите точку останова на открывающей фигурной скобке
функции CScribbleWindow::SelecrBlackPen. Затем запустите програм-
му и выберите команду PenіBlack. (Чтобы получить сообщение от
Windows, возможно придется нажать клавишу.) Отладчик TDW должен
остановить выполнение на точке останова. Поскольку этого не про-
исходит, здесь что-то неверно.

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

Установка точки останова по сообщению окна
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

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. Ключевые слова встроенного Ассемблера………….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
Параметр 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

Если Вам необходимо зарегистрировать домен
в украинских или международных зонах — пользуйтесь Bestname.ua

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

Запуск удаленного последовательного драйвера………………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
Связь через 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
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 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 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 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, а на другом — прикладной программы. Для

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

этого нужно запустить 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 из командной строки DOS и использовать ко-
манду TDW, за которой могут в произвольном порядке следовать па-
раметры командной строки, либо имя программы с параметрами или
без, либо и то, и другое — и все это как аргументы команды
Windows.

Синтаксис командной строки для TDW имеет следующий вид:

TDW [параметры] [имя_программы [аргументы_программы]]

Отладчик TDW имеет меньше параметров командной строки, чем
Турбо отладчик TD. За исключением параметра -t, используемые им
параметры совпадают с параметрами Турбо отладчика, которые расс-
матривались выше.

Ниже приводятся параметры командной строки TDW:

ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і-?, -р і Обращение за подсказкой о параметрах команднойі
і і строки TDW. і
і і і
і-c і Использование файла конфигурации . і
і і і
і-do і Запуск TDW на вторичном дисплее. і
і і і
і-ds і Обновление экранов путем свопинга (подкачки)і
і і страниц. і
і і і
і-l і Запуск в режиме Ассемблера. Отладка кода началь-і
і і ной загрузки библиотеки DLL. і

TDeb 3.0 #3-3 = 11 =

і і і

і-p і Использование «мыши». і
і і і
і-sc і Игнорировать регистр в именах идентификаторов. і
і і і
і-sdкаталогі Установить в качестве каталога с исходными файла-і
і і ми указанный каталог. і
і і і
і-tкаталог і Установить в качестве начального каталога запус-і
і і ка указанный каталог. і
АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Один из этих параметров командной строки, параметр 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 он появляется в полноэкранном символьном ре-
жиме 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 не может по завершении остаться

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

резидентным;

* 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 є
ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННЅ

Рис. 17.1 Окно Windows Messages

TDeb 3.0 #3-3 = 16 =

Выбор окна
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДї
і Add… і Добавить
і Remove і Удалить
і Delete All і Удалить все
АДДДДДДДДДДДДДДЩ

Прежде чем вы сможете регистрировать сообщения, вы должны
сначала указать, для которого окна будут регистрироваться сообще-
ния. Это выполняется в верхней левой области, области выбора окна
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 ±±±±±± є
є є
ИННННННННННННННННННННННННННННННННННННННННј

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

После того, как описатель инициализирован и вы вернулись в
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±±±±±±±±±±±±±є
є і є
є і є
є і є
єДДДДДДДДДДДДДДДДДДДДДДДДДБє
єHwnd:2214 wParam:0000 lParam:000000000 (000f) WM PAINT є
є є
є є
є є
ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННЅ

Рис. 11.1 Окно Windows Messages с разрешенной поддержкой
ObjectWindows

ЪДДДДДДДДДДДДДї
і Add… і Добавить
і Remove і Отменить
і Delete All і Удалить все
АДДДДДДДДДДДДДЩ

Перед тем, как вы сможете регистрировать сообщения, нужно
сначала указать, для какого окна регистрируются сообщения. Это
можно сделать в левой верхней области — области выбора окна. Ло-
кальное меню области (которое активизируются с помощью клавиш 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 є
є ±±±±±±± є
є є
ИНННННННННННННННННННННННННННННННННННННННННЅ

Рис. 17.4 Диалоговое окно Add Window с разрешенной поддерж-
кой ObjectWindows

Примечание: Ввод в данном окне первого значения уста-
навливает также класс сообщений в значение «Log all
messages» («Регистрация всех сообщений»).

Вы можете ввести либо имя подпрограммы, которая обрабатывает
сообщения для окна (выберите переключатель Window Object) или
значение-описатель (выберите переключатель Handle). Введите
столько имен подпрограмм или значений описателей, сколько нужно
для отслеживания сообщений ваших окон.

Отмена выбора окна
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Для отмены выбора окна переместите курсор на элемент, затем
либо выберите локальное меню и используйте команду Remove (Уда-
лить), либо нажмите клавиши Del, Ctrl-Y или Ctrl-R.

Чтобы отменить все окна, выберите в локальном меню команду
Delete All (Удалить все).

TDeb 3.0 #3-3 = 22 =

Задание класса сообщений и действия
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Верхняя правая область — это область класса сообщений. Ее
локальное меню идентично локальному меню области выбора окна и
позволяет вам добавить класс сообщения, удалить класс сообщения
или удалить все классы, которые вы добавили.

ЪДДДДДДДДДДДДДї
і Add… і Добавить
і Remove і Отменить
і Delete All і Удалить все
АДДДДДДДДДДДДДЩ

Перед тем, как добавить в данной области класс сообщений, в
области выбора окна нужно задать процедуру окна или описатель.

Если вы не задаете конкретный класс сообщений или класс
просматриваемых сообщений, то TDW наблюдает за всеми сообщениями,
передаваемыми процедуре окна или его описателю.

Добавление класса сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Чтобы добавить класс сообщений, выберите в области класса
сообщений команду локального меню Add (Добавление). TDW выводит
следующее диалоговое окно:

Й[*]НННSet message filterННННННННННННННННН»
є Message Class OK є
є ( ) All messages ±±±±±±± є
є ( ) Mouse є
є ( ) Window Cancel є
є ( ) Input ±±±±±±± є
є ( ) System є
є ( ) Initialization Help є
є ( ) Clipboard ±±±±±±± є
є ( ) DDE є
є ( ) Non-client є
є ( ) Other є
є (.) Single message ( ) Break є
є (.) Log є
є Single Message name є
є ±±±±±±±±±±±±±±±±±±±±±± є
ИНННННННННННННННННННННННННННННННННННННННННЅ

Рис. 17.5 Диалоговое окно Set Message Filter

Message Class — класс сообщений; All messages — все сообще-
ния; Mouse — «мышь»; Window — окно; Input — ввод; System — систе-
ма; Initialization — инициализация; Clipboard — буфер вырезанного
изображения; DDE — динамический обмен данными ; Non-client — не
пользовательское; Other — прочее; Single message — отдельное со-

TDeb 3.0 #3-3 = 23 =

общение; Break — прерывание; Log — регистрация; Single message
name — имя отдельного сообщения.

Диалоговое окно Set Message Filter (Задание фильтра сообще-

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Turbo Debugger 3.0 #3-3

КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

LIB.com.ua [электронная библиотека]: : Turbo Debugger 3.0 #3-3

ния) выводит вам подсказку как для класса, так и для действия,
выполняемого при приеме сообщения.

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

TDeb 3.0 #3-3 = 24 =

Классы сообщений описываются в следующей таблице:

Классы сообщений Windows Таблица 17.1
ЪДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Класс сообщения і Описание і
ГДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і All messages і Все сообщения, начинающиеся с WM_. і
і (все сообщения) і і
і і і
і Mouse і Сообщения, генерируемые событием от і
і («мышь») і «мыши» (например, WM_LBUTTONWODN и і
і і WM_MOUSEMOVE) і
і і і
і Window і Сообщения от менеджера Windows і
і (окно) і (например, WM_PAINT и WM_CREATE) і
і і і
і Input і Сообщения, генерируемые по событию і
і (ввод) і от клавиатуры или при доступе і
і і пользователя к меню System, полосе і
і і прокрутки, или блоку размера і
і і (например, WM_KEYDOWN и і
і і WM_SYSCOMMAND) і
і і і
і System і Сообщения, генерируемые при і
і (система) і изменениях в системе (например, і
і і WM_FONTCHANGE и WM_SPOOLERSTATUS) і
і і і
і Initialization і Сообщения, генерируемые при і
і (инициализация) і создании диалогового блока или окна і
і і (например, WM_INITDIALOG и і
і і WM_INITMENU) і
і і і
і Clipboard і Сообщения, генерируемые, когда одна і
і (буфер вырезанного і прикладная задача пытается получить і
і изображения) і доступ к буферу вырезанного і
і і изображения или окну другой і
і і прикладной задачи (например, і
і і WM_SIZECLIPBOARD и WM_DRAWCLIPBOARD)і
і і і
і DDE і Сообщения динамического обмена і
і (динамический і данными, генерируемые прикладными і
і обмен данными) і программами при коммуникации с і
і і окнами другой прикладной программы і
і і (например, WM_DDE_INITIATE и і
і і WM_DDE_ACK) і
і і і
і Non_client і Сообщения, генерируемые Windows і
і (не пользователь) і для обслуживания непользовательской і
і і области окна прикладной задачи і
і і (например, WM_NCHITTEST и і
і і WM_NCCREATE) і
і і і

TDeb 3.0 #3-3 = 25 =

і Other і Любые сообщения, начинающиеся с і
і (прочие) і WM_, которые не попадают в другие і
і і категории, например, другие і
і і сообщения управления отображением і
і і и многие интерфейсные і
і і документирующие сообщения і
і і і
і Single Message і Любое отдельное сообщение, і
і (отдельное сообщение)і начинающееся с WM_, которое вы і
і і хотите зарегистрировать или і
і і прервать программу по сообщению і
АДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

Для отслеживания отдельного сообщения выберите Single
Message (Отдельное сообщение) и введите имя или номер сообщения.
Если вы вводите имя сообщения, учтите, что все буквы должны быть
заглавными.

Действие по умолчанию — помещение сообщения в журнал. Другое
возможное действие, прерывание программы по данному сообщению,
эквивалентно установки для данного сообщения точки останова.

Например, если вы хотите отслеживать сообщение WM_PAINT и
останавливать программу всякий раз, как в окно посылается это со-
общение, вы выбираете область Window Selection (Выбор окна) и вы-
полняете следующие действия:

1. Выверите правую верхнюю область, Message Class (Класс со-
общений).

2. Вызовите ее локальное меню и выберите команду Add (Добав-
ление).

2. В окне диалога выберите при помощи селективных переключа-
телей Action (Действие) установку Break (Прерывание) и
при помощи селективных переключателей Message Name (Имя
сообщение) установку Single Message (Отдельное сообще-
ние).

4. В блоке ввода Message Name (Имя сообщения) введите
WM_PAINT и нажмите клавишу Return.

На Рис. 17.1 показано, как выглядит окно Windows Messages
после того, как вы сделали данный выбор, и поступило сообщение.

Удаление класса сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Для удаления класса сообщений поместите курсор на удаляемый
элемент и либо вызовите локальное меню и выберите из него команду
Remove, либо нажмите Delete или клавиши Ctrl-Y.

Для удаления всех классов выберите команду Delete All (Уда-

TDeb 3.0 #3-3 = 26 =

лить все) из локального меню.

После того, как вы удалите все классы, будет установлено
умолчание «Log all messages» («Регистрация всех сообщений»). Вы
не можете удалить этот класс командами Remove или Delete All.

Просмотр сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДДї
і Send to log window Noі Передача в окно регистрации
і Erase log і Стереть регистрацию
АДДДДДДДДДДДДДДДДДДДДДДДДЩ

Оконные сообщения выводятся в нижней области окна Windows
Messages. Эта область может содержать до 200 сообщений.

Если вы хотите сохранить сообщения в файле, вы должны отк-
рыть файл журнала для окна Log (выбрав команду ViewіLog File (Об-
зоріФайл регистрации), а затем команду Open Log File (Открытие
файла регистрации) из локального меню). Затем вы должны перейти
обратно в область Messages (Сообщения) и изменить установку Send
To Log Window (Передача в окно регистрации) локального меню в
значение Yes (это означает, что запись в протокол разрешена).

Если вы хотите очистить область от всех сообщений, выберите
команду Erase Log (Стереть протокол) из локального меню. На сооб-
щения, записываемые в окно Log (Регистрация), эта команда не вли-
яет.

Замечания по сообщениям окна
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

При установки прерывания по классу сообщений от «мыши» нужно
учитывать, что перед тем, как снова станет активной клавиатура,
за сообщением mouse down (перемещение «мыши» вниз) должно следо-
вать сообщение mouse up (перемещение «мыши» вверх). Это ограниче-
ние означает, что когда вы возвращаетесь в прикладную программу,
вам может потребоваться несколько раз нажать кнопку «мыши», чтобы
получить сообщение mouse up. Вы узнаете, что в Windows принято
сообщение, когда увидите его в нижней области окна Windows
Messages (Сообщения Windows).

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

TDeb 3.0 #3-3 = 27 =

сатель, чтобы увидеть, выбрали ли вы «кнопку» Handle (Описатель),
проверьте диалоговое окно Set Message Filter (Задание фильтра со-
общений).

TDeb 3.0 #3-3 = 28 =

Получение содержимого памяти и списка модулей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Для получения содержимого глобальной или локальной динами-
чески распределяемой области или списка модулей вашей программы
для Windows сначала вызовите окно Log командой ViewіLog (Просмотр
іПротокол:), а затем вызовите локальное меню. Последней командой
локального меню окна Log (Регистрация) является команда Display
Windows info (Вывод информации Windows). Выбор этой команды вызо-
вет на экран окно диалога Windows Information, из которого вы мо-

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43