 |
TDeb 3.0 #3-3 = 90 =
Отладка драйвера устройства
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Опишем теперь, как можно отладить драйвер устройства с по-
мощью утилиты TDREMOTE:
1. При компиляции или ассемблировании драйвера устройства
убедитесь, что вы включаете в него отладочную информацию
(информацию об идентификаторах). Используйте для этого
команды типа TASM /ZI или BCC -v, либо TPC /V.
2. Чтобы включить в него отладочную информацию, скомпонуйте
драйвер устройства с параметром /v.
3. Для перемещения отладочной информации из файла .EXE в
файл .TDS и для преобразования файла .EXE в файл .COM ис-
пользуйте утилиту TDSTRIP:
TDSTRIP -s -c имя_файла
где "имя_файла" - имя отлаживаемого вами драйвера.
4. Скопируйте файл .COM на удаленную систему.
5. Измените файл CONFIG.SYS на удаленной системе, включив в
него строку:
device = имя_файла.COM
6. Убедитесь, что в имени файла указан корректный маршрут.
7. Перезагрузите систему для загрузки драйвера устройства.
8. Запустите утилиту TDDEV, которая сообщит вам об адреса в
памяти на удаленной системе, по которому DOS загрузила
драйвер устройства. Запомните этот адрес. Сегмент, ука-
занный в данном адресе, мы будем обозначать, как Seg.
9. Далее нужно определить объем таблицы идентификаторов в
памяти, которую требуется выделить Турбо отладчику при
его вызове. Для этого запомните размер вашей таблицы
идентификаторов (то есть размер файла .TDS), воспользо-
вавшись командой DOS DIR.
Данный размер представляет собой минимальный объем опера-
тивной памяти, которую нужно выделить при запуске Турбо
отладчика, поскольку, кроме хранящейся там информации,
Турбо отладчик при загрузке таблицы идентификаторов сам
создает несколько таблиц (рабочих и других). Обычно нужно
выделять примерно в 1.5 раза больше памяти, чем занимает
на диске файл .TDS. Турбо отладчик сообщает вам, когда вы
выделяете слишком мало памяти для таблицы идентификато-
TDeb 3.0 #3-3 = 91 =
ров, выводя сообщение: "Not enough memory to load symbol
table" ("Для загрузки таблицы идентификаторов недостаточ-
но памяти"). Обычно это происходит при выполнении команды
FileіSymbol Load (ФайліЗагрузка таблицы идентификаторов).
10. Загрузите на удаленной системе утилиту TDREMOTE.
11. Загрузите Турбо отладчик (используя в случае необходимос-
ти параметры -r, -rp или -rs), не задавая имя файла и вы-
делив память для таблицы идентификаторов с помощью пара-
метра командной строки -sm. В этом параметр указывается
аргумент, определяющий объем (в килобайтах) памяти, кото-
рая будет выделяться для таблицы идентификаторов. Напри-
мер, если вы хотите зарезервировать для таблицы идентифи-
каторов 3К, введите в ответ на подсказку DOS команду:
TD -sm3
Когда вы загружаете Турбо отладчик, не задавайте имени
файла, так как вы отлаживаете то, что уже находится в па-
мяти. В используемом по умолчанию каталоге у вас должны
присутствовать файла резидентной программы и файл .TDS, к
которым отладчик может обращаться для получения информа-
ции об идентификаторах.
12. Теперь вы можете начать отладку вашего драйвера устройс-
тва, задав точки останова, сделав Турбо отладчик рези-
дентным и выполнив некоторые действия на уровне команд
DOS, которые приведут к срабатыванию точки останова. Это
переводит Турбо отладчик в соответствующее место вашего
исходного кода. Однако, задача отладки может для вас уп-
роститься, если вы сначала вызовите информацию об иденти-
фикаторах, которая имеется в таблице идентификаторов, и
исходный файл.
13. Когда появляется экран Турбо отладчика, очистите индика-
ционное сообщение, нажав клавишу Esc, и загрузите с по-
мощью команды FileіSymbol Load (ФайліЗагрузка таблицы
идентификаторов) таблицу идентификаторов. Если вы получи-
те сообщение, в котором говорится, что для загрузки таб-
лицы идентификаторов не хватает памяти, выйдите из Турбо
отладчика и запустите его снова из командной строки DOS
задав в качестве аргумента параметра -sm большее значе-
ние.
14. Таблица идентификаторов содержит набор идентификаторов,
связанный с ячейками памяти в вашем коде. В качестве пре-
фикса идентификаторов в таблице указывается #имя_файла#,
где "имя_файла" - это имя файла резидентной программы.
Например, если ваш драйвер устройства называется
DRIVER.ASM (исходный файл) и содержит метку Intr, то
ячейку в памяти отмечает идентификатор #DRIVER#INTR.
TDeb 3.0 #3-3 = 92 =
Идентификаторы в таблице идентификаторов представляют со-
бой смещения (один от другого) на корректное число байт,
но абсолютный адрес первого идентификатора не определен,
так как DOS может загрузить ваш драйвер устройства в дру-
гое место памяти (а не по тому адресу, как он ассемблиро-
вался). По этой причине вы должны использовать команду,
чтобы явным образом найти первый идентификатор в памяти.
15. Используйте команду FileіTable Relocate (ФайліПеремещение
таблицы идентификаторов) для помещения первого идентифи-
катора из таблицы идентификаторов в соответствующую ячей-
ку памяти. Таким образом, имеющаяся информация об иденти-
фикаторах будет соответствовать вашему коду (программе).
Для этого в ответ на подсказку Турбо отладчика задайте
адрес сегмента Seg вашей резидентной программы, который
определен на шаге 6.
16. Диcассемблированные из памяти операторы синхронизированы
с информацией из таблицы идентификаторов. В случае нали-
чия исходного файла исходные операторы выводятся на той
же строке, что и информация из таблицы идентификаторов.
17. Задайте в вашем исходной файле точку останова.
18. Выберите команду FileіResident (ФайліРезидент), чтобы
сделать резидентным сам отладчик. Это не имеет ничего об-
щего и не нарушит резидентности вашего драйвера: когда он
будет выполняться в Турбо отладчике, он сам станет рези-
дентным при загрузке удаленной системы в результате вы-
полнения файла CONFIG.SYS. Единственная причина того, что
отладчик делается резидентным, заключается в том, что вы
можете перейти обратно в DOS и вызвать ваш драйвер уст-
ройства.
19. Когда вы вернетесь снова к командной строке DOS на уда-
ленной системе, сделайте что-либо для активизации вашего
драйвера устройства. Например, выведите информацию на со-
ответствующее устройство.
20. Когда в вашей программе-драйвере встретится точка остано-
ва, инициализируется Турбо отладчик, а код вашей програм-
мы выведется в соответствующей точке. Теперь вы можете
начать отладку вашей программы. (Кроме того, вы можете
повторно войти в отладчик из DOS, дважды нажав клавиши
Ctrl-Break.)
Завершение сеанса отладки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Для завершения сеанса отладки выйдите обычным путем из Турбо
отладчика, выбрав команду FileіQuit (ФайліВыход или нажав клавиши
Alt-X. Если вы отлаживаете резидентную программу, ее можно завер-
шить следующим образом:
TDeb 3.0 #3-3 = 93 =
- Если вы отлаживаете резидентную программу, загруженную
Турбо отладчиком, она будет разгружена автоматически.
- Если вы отлаживаете программу, загруженную непосредственно
из DOS, запустите ее, пока Турбо отладчик не станет снова
резидентным. После того, как Турбо отладчик станет рези-
дентным, дважды нажмите клавиши Ctrl-Break для вывода Тур-
бо отладчика, затем используйте клавиши Alt-X, чтобы выйти
из Турбо отладчика, но оставить программу резидентной.
Причиной выполнения всех этих шагов является то, что выход
из Турбо отладчика во время отладки резидентной программы, кото-
рая не загружалась Турбо отладчиком, оставляет вашу систему в не-
устойчивом состоянии.
TDeb 3.0 #3-3 = 94 =
Приложение A. Параметры командной строки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Когда вы запускаете Турбо отладчик с помощью командной стро-
ки DOS, его можно одновременно настроить, используя для этого
различные параметры. Общий формат командной строки имеет вид:
TD [параметры] [имя_программы [аргументы_программы] ]
Элементы, заключенные в квадратные скобки, являются необяза-
тельными. Если за параметром указывается минус (-), то данный па-
раметр запрещается (если он разрешен в файле конфигурации).
|