 |
і і Вы можете использовать этот параметр, і
і і чтобы предотвратить загрузку данной і
і і информации для библиотеки, которая не і
і і требует отладки. По умолчанию будет і
і і установлено значение Yes (Да). і
і і і
і Debug startup і Задает, нужно ли отлаживать код начальной і
і (No/Yes) і загрузки DLL. По умолчанию устанавливаетсяі
і і No (Нет). і
і і і
і DLL Name і Введите имя DLL, отсутствующей в списке і
і і DLLs & Programs (DDL и программы), чтобы і
і і добавить библиотеку в этот список. і
і і Добавление DLL в список позволит затем і
і і использовать для этой DLL одну из трех і
і і предыдущих команд. При необходимости можноі
і і задать полный маршрут. і
і і і
і Add DLL і Добавить DLL в текущий блок текстового і
і і ввода в список DLLs & Programs. і
АДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Добавление DLL в список DLLs & Programs
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Прежде чем вы сможете установить отладочные параметры, необ-
ходимость отлаживать начальный код загрузки DLL или загружать
таблицу имен идентификаторов и исходный код DLL, эта DLL должна
быть внесена в список DLL & Programs (DLL и программы). Библиоте-
ка DLL, к которой обращается ваша программа, может и не быть в
этом списке, поскольку сразу после загрузки программы TDW знает
только о DLL, компонуемых с начальным кодом загрузки прикладной
программы. Программа может также запустить DLL явно, при помощи
команды LOADLIBRARY. TDW не знает об этом до вызова LOADLIBRARY.
TDeb 3.0 #3-3 = 38 =
Существует два различных типа кода начальной загрузки, упо-
минаемые в данном разделе: начальный код загрузки вашей приклад-
ной программы и начальный код загрузки DLL. Некоторые динамически
компонуемые библиотеки DLL запускаются начальным кодом загрузки
вашей прикладной программы. Когда ваша программа запускает DLL,
выполняется начальный код загрузки DLL.
Если вы хотите добавить DLL в список DLLs & Programs, вызо-
вите диалоговое окно Load Modules or DLLs (Загрузка модулей или
DDL) (нажмите клавишу F3 или используйте команду ViewіModules
(ОбзоріМодули)), перейдите к блоку текстового ввода DLL Name (имя
DLL), введите имя DLL (если необходимо, введите полный маршрут),
и активизируйте "кнопку" Add DLL, чтобы добавить это имя в спи-
сок.
TDeb 3.0 #3-3 = 39 =
Установка параметров отладки для DLL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Если вы хотите установить для DLL точки останова или слеже-
ния, или еще какие-либо параметры отладки, вызовите окно диалога
Load Modules or DLLs (Загрузка модулей или DDL) (нажмите клавишу
F3 или выберите команду ViewіModules), найдите DLL в списке DLLs
& Programs, выделите его и затем используйте команду Symbol Load
(Загрузка идентификатора), чтобы получить окно Module с этой биб-
лиотекой DLL в нем. В окне Module (Модуль) вы можете выполнить с
DLL интересующие вас операции.
Управление загрузкой TDW таблиц имен идентификаторов DLL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
По умолчанию TDW загружает таблицу имен идентификаторов и
исходный код для каждой DLL, к которой обращается ваша прикладная
программа, но только если DLL имеет совместимую таблицу имен
идентификаторов. DLL имеет таблицу имен идентификаторов, совмес-
тимую с TDW. При компиляции с включенной информации для отладки и
с помощью компилятора Турбо Паскаля для Windows DLL содержит таб-
лицу идентификаторов, совместимую с TDW.
Поскольку загрузка отладочной информации для DLL и затем
загрузка отладочной информации для прикладной программы после то-
го, как DLL отработает, занимает время, вам может понадобиться
отменить стандартные действия для DLL, которую вы не хотите отла-
живать. Чтобы TDW не загружал таблицу имен идентификаторов для
DLL, вызовите окно диалога Load Modules or DLLs (нажатием клавиши
F3 или командой ViewіModules), найдите имя этой DLL в списке DLLs
& Programs, выделите его и активизируйте "кнопку" Load Symbols
(Загрузка идентификаторов) со значением No (Нет).
Отладка начального кода загрузки DLL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
По умолчанию TDW не отлаживает начальный код загрузки DLL, а
только загружает таблицу имен идентификаторов DLL, когда ваша
прикладная программа вызывает точку входа этой DLL. Затем TDW вы-
зывает окно Module (Модуль) или CPU (ЦП) с маркером текущей стро-
ки на начале подпрограммы DLL, вызванной прикладной программой.
Отладчик TDW будет отлаживать начальный код загрузки DLL,
если вы явно зададите это. Вы можете использовать TDW для отладки
любого из двух типов начального кода загрузки DLL.
Какого рода начальный код загрузки вы отлаживаете
- Код инициализации, непосредственно после LibMain (по умол-
чанию).
- Ассемблерный код, скомпонованный с DLL, выполняющий на-
чальную загрузку и содержит эмулированные математические
TDeb 3.0 #3-3 = 40 =
пакеты для используемой DLL модели памяти (выбираемой при
запуске TDW параметром командной строки -l).
После того, как вы задали отладку начального кода загрузки
одной или более DLL вашей прикладной программы, TDW загружает
таблицу имен идентификаторов для каждой библиотеки DLL либо когда
начальный код загрузки вашей прикладной программы запускает эту
DLL, либо когда прикладная программа явно делает вызов
LOADLIBRARY.
Загружена ли уже ваша прикладная программа?
Если вы пытаетесь загрузить прикладную программу, а уже за-
тем задать отладку начального кода загрузки, отладчик TDW может
повести себя иначе, чем вы ожидали, так как некоторые или все
библиотеки DLL могут уже оказаться загруженными. Следовательно,
задавать отладку начального кода нужно:
- Установив отладку для DLL до загрузки вашей прикладной
программы.
- Загрузив вашу прикладную программу, указав DLL для отладки
начального кода загрузки, а затем перезапустив программу
(Ctrl-F2 или RunіProgram Reset).
Выполнение отладки начального кода загрузки
Учитывая все эти предварительные замечания, используйте для
задания отладки начального кода загрузки для одной или более DLL
и для отладки начального кода загрузки этих библиотек следующие
шаги:
1. Вызовите окно диалога Load Modules or DLL (нажмите F3 или
воспользуйтесь командой ViewіModules (ОбзоріМодули).
2. Найдите DLL в списке DLLs & Programs и выделите ее.
3. Активизируйте "кнопку" Debug Startup (Отладка кода иници-
алиазции) значением Yes (Да).
4. Повторите шаги 2 и 3, пока вы не зададите отладку началь-
ного кода загрузки для всех библиотек DLL, для которых
это необходимо.
5. Если нужная вам DLL находится не в списке или в списке
нет DLL (поскольку вы еще не загрузили прикладную прог-
рамму), используйте поле текстового ввода DLL Name для
ввода каждого имени DLL и добавления его в список при по-
мощи "кнопки" Add DLL (Добавление DLL), а затем выберите
"кнопку" Debug Startup Yes (Отладка начального кода раз-
решена).
6. После того, как вы установили все DLL, для которых вы хо-
TDeb 3.0 #3-3 = 41 =
тите отлаживать начальный код загрузки, следующим шагом
будет либо загрузка при помощи команды FileіLoad
(ФайліЗагрузка) вашей прикладной программы (если вы еще
ее не загрузили), либо перезагрузка программы при помощи
команды RunіProgram Reset (ВыполнениеіСброс программы)
(если вы загрузили ее до того, как задали отладку началь-
ного кода загрузки).
7. Перед выполнением прикладной программы вам следует уста-
новить точки останова, чтобы после выполнения кода на-
чальной загрузки DLL возвращаться в прикладную программу.
Когда в окне Module находится исходный код прикладной
программы, сделайте следующее:
а) установите на первой строке прикладной программы
точку останова;
б) если вы отлаживаете код начальной загрузки для какой-
либо из DLL, загруженной вызовом LoadLibrary, уста-
новите точку останова на первой строке кода после
каждого из этих вызовов.
7. Когда ваша прикладная программа запускает каждую из DLL,
отладчик TDW выводит либо LibMain DLL в окне Module (по
умолчанию), либо начало листинга ассемблерного кода на-
чальной загрузки библиотеки в окне CPU (так как TDW запу-
щен с параметром -l).
8. Когда вы закончили отлаживать начальный код загрузки DLL,
нажмите клавишу F9 для того, чтобы выполнить до конца на-
чальный код загрузки и вернуться к прикладной программе.
Если вы задали еще другие библиотеки DLL для отладки на-
|