 |
чального кода загрузки, TDW выводит на экран начальный
код для этих библиотек DLL, как только программа запуска-
ет каждую из них.
Не забудьте выполнить до конца начальный код загрузки DLL,
прежде чем перезагрузить текущую прикладную программу или загру-
зить новую. Если вы забудете сделать это, частично выполненный
начальный код DLL может привести к тому, что Windows "зависнет",
и вам придется перезагружаться.
TDeb 3.0 #3-3 = 42 =
Преобразование описателей памяти в адреса
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Windows использует для объектов не адреса памяти, а логичес-
кие номера (описатели) памяти, так как выполняет собственную ор-
ганизацию памяти и может изменить физическое расположение объекта
в памяти. Если вам нужен фактический адрес, соответствующий логи-
ческому номеру, вы можете использовать для этого встроенные имена
Турбо отладчика - lh2fp (для локальных логических номеров) и
gh2fp (для глобальных логических номеров) для обращения по логи-
ческому номеру к адресу памяти.
Вы можете использовать эти имена для приведения типов в TDW,
как для приведения типов указателей в Турбо Паскале обычные ис-
пользуются символические имена. Например, вы можете преобразовать
локальный логический номер hLocalMemory двумя методами:
- Вы можете использовать окно DataіInspect (ДанныеіПроверка)
для вычисления следующего выражения:
(lh2fp) hLocalMemory
- Вы можете использовать команду Type Cast (Приведение типа)
окна Inspector (Проверка) и ввести там lh2fp в качестве
типа.
В любом случае выражение вычисляется для первого символа
блока памяти, на который указывает HLocalMemory.
Вы можете также использовать любой из этих методов для вы-
полнения более сложного приведения типов - например, для двухша-
гового приведения от логического номера к дальнему символьному
указателю на дальний указатель данных в памяти, следующим обра-
зом:
(Mystruct far *) (lh2fp)hLocalMemory
Рекомендации по отладке
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Поскольку прикладные программы для Windows являются интерак-
тивными программами, лучший способ отладки состоит в том, чтобы
запустить ее и останавливать в точках останова.
Как первичное средство отладки пошаговое выполнение или
трассировка программы для Windows может оказаться недостаточным,
так как в конце концов вам встретится код, который зациклится в
ожидании сообщения для окна. Для таких случаев вы можете устано-
вить, там где это возможно, точки останова для кода и для сообще-
ний, выполнить программу до такой точки останова, а затем уже пе-
рейти к пошаговому выполнению или трассировке.
При пошаговом режиме в цикле приема сообщения вы можете на-
TDeb 3.0 #3-3 = 43 =
жать комбинацию клавиш Alt-F5, чтобы видеть экран прикладной
программы, но вы не сможете с ней взаимодействовать. Для этого вы
должны нажать клавишу F9 для запуска программы, чтобы видеть окна
программы, однако как быть, если вам нужно попасть обратно в TDW
для трассировки ошибки, которую вы обнаружили, пока использовали
одно из окон вашей программы?
В случае прикладной программы для DOS вы можете нажать Ctrl-
Break, чтобы прервать программу и вернуться к Турбо отладчику,од-
нако в случае Windows эта команда не работает. Однако, и здесь
есть способ прервать программу: нажмите комбинацию клавиш
Ctrl-Alt-SysRq. Попав обратно в TDW, вы можете установить точки
останова для кода и сообщений, задать выражения просмотра, прос-
мотреть все сообщения, зарегистрированные в протоколе, или выпол-
нить любые другие действия по локализации ошибки. Как только вы
будете готовы вернуться в отлаживаемую программу, нажмите клавишу
F9.
Когда ваша программа прервана, нельзя делать следующее:
- Продолжить отладку пошаговым выполнением. Попытка пошаго-
вого выполнения после того, как произошло прерывание, при-
ведет к непредсказуемым результатам, поскольку ваша прог-
рамма могла выполнять код Windows. Обычно в этом случае
Windows завершает как вашу прикладную программу, так и
TDW, выводя сообщение: "Unrecoverable application error"
("Невосстановимая ошибка прикладной программы").
- Если ваша прикладная программа выполняла код Windows, не
завершайте выполнение ни прикладной программы, ни отладчи-
ка TDW. Если вы это сделаете, то Windows может сбиться и
"зависнуть", и вам придется перезагружать систему. Если в
этой ситуации вы попытаетесь выйти из программы или пере-
загрузить ее, TDW выведет диалоговое окно с запросом:
Ctrl-Alt-SysRq interrupt. System crash possible. Continue ?
(Прерывание по Ctrl-Alt-SysRq. Возможен сбой системы. Про-
должить?)
TDeb 3.0 #3-3 = 44 =
Сообщения об ошибках TDW
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Существует два сообщения об ошибке, возвращаемые исключи-
тельно отладчиком TDW. Кроме того, могут возвращаться и сообщения
об ошибках Турбо отладчика, распространяющиеся и на работу TDW,
например "Symbol not found" в ответ на несуществующее имя оконной
процедуры.
Ctrl-Alt-SysRq interrupt. System crash possible. Continue ?
(Прерывание по Ctrl-Alt-SysRq. Возможен сбой системы. Про-
должить?)
Вы пытались либо выйти из TDW, либо перезагрузить отлаживае-
мую прикладную программу, когда программа была приостановлена в
результате нажатия клавиш Ctrl-Alt-SysRq. Поскольку в момент при-
остановки программы выполнялся код ядра Windows, выход из TDW или
перезагрузка прикладной программы может привести к непредсказуе-
мым результатам (вероятнее всего, к зависанию системы и необходи-
мости ее перезагрузки).
Если это возможно, установите в коде точку останова и снова
запустите программу. Когда ваша программа встретит эту точку ос-
танова и выйдет в TDW, вы можете завершить работу с TDW или пере-
загрузить вашу программу.
Invalid window handle
(Неверный логический номер окна)
Пытаясь установить регистрацию сообщений для окна вашей
программы, вы ввели имя переменной логического номера (описате-
ля), которой не был присвоен логический номер. Пройдите в пошаго-
вом режиме до оператора, где этот логический номер присваивается
переменной, и попробуйте снова ввести это имя.
TDeb 3.0 #3-3 = 45 =
Глава 18. Отладка прикладной программы для Windows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В данной главе описывается отладка стандартной прикладной
программы Windows, написанной без библиотечного класса
ObjectWindow.
Как было сказано в Главе 17, отладка прикладной программы
для Microsoft Windows во многом похожа на отладку программы для
DOS, особенно если речь идет об интерактивной программе для DOS.
Все методы отладки, описанные в Главе 14, "Отладка программы",
применимы также и для программы для Windows.
Поскольку прикладная программа для Windows использует интер-
фейс прикладных программ для Windows (Application Program
Interface - API), существует множество дополнительных способов
работы с программой. Данная глава не претендует на то, чтобы нау-
чить вас способам безошибочного программирования в Windows. Ее
цель состоит в том, чтобы продемонстрировать средства TDW на при-
мере отладки прикладной программы.
Примеры программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
С отладчиком TDW поставляются три примера программ, и все
они требуют наличия "мыши". Это программы:
- BCWDEMO.EXE, выполняемый файл программы Simple Paint. Эта
программа позволяет строить линии, эллипсы и прямоугольни-
ки тремя цветами и тремя толщинами линии. Она устанавлива-
ется для работы под управлением менеджера программ, и мо-
жет быть вызвана посредством выбора соответствующей
пиктограммы. Вместе с BCWDEMO.EXE также поставляются файлы
исходного текста, BCWDEMO.C, и файл проекта, BCWDEMO.PRJ.
- BCWDEMOA.EXE, выполняемый файл, который содержит все ошиб-
ки. С ним также поставляются файлы исходного текста,
BCWDEMOA.C, и файл проекта, BCWDEMOA.PRJ.
- BCWDEMOB.EXE, выполняемый файл, который содержит все те же
ошибки, что и BCWDEMOA, кроме первой. С ним также постав-
ляются файлы исходного текста, BCWDEMOB.C, и файл проекта,
BCWDEMOB.PRJ.
TDeb 3.0 #3-3 = 46 =
Кроме того, имеется несколько файлов, общих для всех трех
версий программы, а именно:
|