 |
- BCWDEMO.DEF, это файл определения модуля.
- BCWDEMO.H, это файл заголовка.
- BCWDEMO.RC, это исходный файл для получения ресурсного
файла.
- BCWDEMO.RES это скомпилированный ресурсный файл.
TDeb 3.0 #3-3 = 47 =
Компиляция и компоновка демонстрационных программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Вам предоставляется три версии демонстрационной программы,
которые упрощают изучение данной главы. При желании вы можете са-
ми внести изменения в эти программы. С помощью компилятора
Borland C++ вы можете скомпилировать и скомпоновать их в интерак-
тивной среде разработки разработки программ Borland, используя
имеющиеся файлы проекта.
Более подробную информацию о компиляции программ для Windows
с использованием файлов проекта см. в "Руководстве пользователя
для Borland C++."
Отладка программы BCWDEMOA
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Примечание: Прежде чем начать сеанс отладки, вы можете
немного поэкспериментировать с BCWDEMO.EXE, чтобы понять,
что собственно должна делать эта программа.
Первая отлаживаемая программа называется BCWDEMOA. Запустите
Windows, TDW и запустите BCWDEMOA. Когда в окне Module появится
исходный код программы, нажмите клавишу F9 для запуска примера
программы.
На экране появится курсор в виде "песочных часов", который
означает, что программа работает и выполняет некоторые действия.
Обычно курсор в виде часов скоро исчезает, и на его месте появля-
ется курсор в виде стрелки. Если песочные часы не исчезают, зна-
чит, что-то происходит неверно.
Чтобы перейти в TDW для выяснения причин неверной работы,
нажмите клавиши Ctrl-Alt-SysRq, чтобы приостановить выполнение
программы.
Принятие решения о дальнейших действиях
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
После того, как вы оказались в TDW, следующим шагом вы долж-
ны решить, каким именно образом выяснить, что в программе невер-
но. Обычно если прикладная программа для Windows зависает и не
позволяет судить о ходе ее выполнения, вы перезагружаетесь и на-
чинаете пошаговую отладку подпрограмм инициализации окна. Дойдя
до цикла сообщений, вы можете задать регистрацию сообщений
Windows, можете установить их регистрацию, чтобы затем посмот-
реть, какие сообщения поступают в программу.
Так как исходный экран программы все же был отображен, вы
знаете, что программа дошла до цикла сообщений, поскольку для то-
го, чтобы нарисовать этот экран, она должна была обрабатывать со-
общения Windows. Следовательно, вы можете вместо пошагового вы-
полнения сразу же перейти к регистрации сообщений. Зная, какие
TDeb 3.0 #3-3 = 48 =
сообщения были обработаны, вы как минимум будете знать, какие
участки кода программы были выполнены.
Завершение BCWDEMOA
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В этой точке вы можете задать, какие сообщения вы хотите ре-
гистрировать, и вернуться к программе, нажав клавишу F9, однако
выйдя из программы и снова запустив ее, вы сможете получить более
точную картину происходящего. Поскольку с помощью клавиш Ctrl-Alt
-SysRq вы только приостановили выполнение программы, то выход из
программы в этой точке может привести к зависанию системы (если в
момент приостановки выполнялось ядро Windows). Для завершения
программы выполните следующие шаги:
1. Перезагрузите программу командой RunіProgram Reset
(ВыполнениеіСброс программы) (клавиши Ctrl-F2).
2. После перезагрузки вы получите окно модуля с WinMain. Ес-
ли все так и произошло, вы можете пропустить все дальней-
шие шаги и перейти к разделу "Регистрация сообщений".
3. Если же вы получили окно с сообщением "Ctrl-Alt-SysRq
Interrupt. System Crash possible. Continue?" ("Прерывание
по Ctrl-Alt-SysRq. Возможен сбой системы. Продолжить?",
выберите No (Нет), чтобы отменить выход из программы. В
этом случае выход должен выполняться в точке останова по
сообщению.
4. Вызовите команду ViewіWindows Messages, чтобы вызвать
окно Windows Message (Сообщения Windows).
5. Курсор находится в верхней левой области, Window
Selection (Выбор окна). Вызовите локальное меню (нажав
Alt-F10) и в нем выберите команду Add (Добавление).
6. Введите имя подпрограммы, в которой обрабатываются сооб-
щения для данного окна. В этой программе имеется только
одно окно, и следовательно, только одна подпрограмма об-
работки сообщений, WndProc.
7. Нажмите клавишу Enter, чтобы подтвердить ввод.
8. При помощи клавиши Tab или "мыши" перейдите в правую об-
ласть, Message Class (Класс сообщений), затем вызовите
локальное меню этой области и выберите там команду Add
(Добавление).
TDeb 3.0 #3-3 = 49 =
9. В окне диалога Set Message Filter (Установка фильтра со-
общений) выберите All Messages (Все сообщения) в качестве
класса сообщений и Break (Прерывание) в качестве дейс-
твия, и нажмите Enter, чтобы добавить этот класс сообще-
ний. TDW затем прекратит выполнение программы на первом
же сообщении.
10. Для возобновления работы программы нажмите F9. На следую-
щем же сообщении программа прервется, и управление возв-
ратится в TDW.
11. В TDW установите курсор на WinMain и при помощи команды
RunіProgram Reset (ВыполнениеіСброс программы) перезагру-
зите программу. Затем вы сможете продолжить отладку.
TDeb 3.0 #3-3 = 50 =
Регистрация сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
На этот раз, прежде чем запустить программу, вы зададите TDW
регистрацию всех сообщений. Откройте окно Windows Messages (Сооб-
щения Windows) при помощи команды ViewіWindows messages (Об-
зоріСообщения Windows) и добавьте в верхней левой области
WndProc. В правой верхней области должна появиться надпись Log
all messages (Регистрация всех сообщений). Это именно то, что вам
нужно, и работа с этим окном закончена.
Поскольку заранее число регистрируемых сообщений неизвестно,
может случиться так, что до выхода из программы предельное число
регистрируемых сообщений (200) будет превышено, поэтому вы должны
обеспечить запись сообщений в файл. Для этого:
1. Перейдите в нижнюю область окна Windows Messages (Сооб-
щения Windows) и вызовите локальное меню.
2. Выберите команду Send To Log Window (Пересылка в окно ре-
гистрации). Если эта установка имеет значение No (Нет),
переключите ее на Yes (Да), нажав клавишу Enter.
3. Перейдите в окно Log (Регистрация), выбрав команду
ViewіLog (ОбзоріРегистрация), и вызовите локальное меню.
4. Выберите команду Open Log File (Открыть файл регистрации)
и нажмите клавишу Enter, чтобы подтвердить имя файла ре-
гистрации (журнала) по умолчанию, BCWDEMOA.LOG.
Теперь вы готовы запустить программу, нажав клавишу F9. Ког-
да появится экран, нажмите клавиши Ctrl-Alt-SysRq, чтобы вернуть-
ся к TDW.
Анализ протокола сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В нижней области окна Windows Messages (Сообщения Windows)
вы увидите множество сообщений WM_PAINT, и вероятно, больше ника-
ких других. Для того, чтобы просмотреть все сообщения, выберите
команду ViewіFile (ОбзоріФайл) и получите список всех файлов в
текущем каталоге. Выберите из этого списка файл BCWDEMOA.LOG,
представляющий собой протокол сообщений.
При этом вы получите достаточно короткий список сообщений
инициализации окна (16 или около этого), за которым следует очень
длинный список сообщений WM_PAINT. причиной является то, что
Windows начала посылать сообщения, чтобы установить исходный эк-
ран, но "застряла" на сообщении WM_PAINT. Данный анализ отражает
то, что вы видели при запуске программы: экран появился, но боль-
ше ничего не происходило.
TDeb 3.0 #3-3 = 51 =
Поиск ошибки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Итак, что делать дальше? Можно начать с просмотра кода, что-
бы найти там тот, участок, который отвечает за обработку
|