Отладка резидентной в памяти программы
Отладка рабочей части резидентной программы эквивалентна отладке любого другого файла. Новое появляется только тогда, когда
вы начинаете отлаживать резидентную часть. Давайте рассмотрим
процесс отладки резидентной программы.
С помощью Turbo Debugger вы можете отлаживать драйвер клавиатуры. При этом для перемещения по отладчику пользуйтесь "мышью".
При компиляции или ассемблировании резидентной программы
обеспечьте наличие в ней отладочной информации.
Запустите отладчик и загрузите программу.
Установите точку останова в начале резидентной части кода.
С помощью команды Run Run запустите рабочую часть программы.
Отладьте рабочую часть программы с помощью обычных методов.
Затем выйдите из TSR. Резидентная часть остается в памяти.
Чтобы сделать резидентным отладчик, выберите команду File Resident. На TSR это не повлияет. После этого вы можете вернуться в DOS и вызвать TSR.
В командной строке DOS нажмите оперативные клавиши вызова
резидентной программы и работайте с ней как обычно.
Выйдите из TSR. Теперь выполняется резидентная часть TSR,
и отладчик обнаруживает точку останова. Вы можете отлаживать резидентный код.
Второй метод отладки резидентной части TSR предусматривает выполнение ее из командной строки DOS и использование
окна CPU отладчика для отладки содержащей TSR области ОЗУ.
Скомпилируйте программу с отладочной информацией.
Используйте утилиту TDSTRIP для удаления из программы
таблицы идентификаторов и помещения ее в файл .TDS.
Запустите TSR из командной строки.
Запустите утилиту TDMEM, которая выводит схему использования памяти. Запомните адрес сегмента, где загружена резидентная часть вашей программы.
Загрузите отладчик и с помощью команды File Symbol Load
загрузите таблицу идентификаторов TSR (файл .TDS).
Установите в начале резидентной части TSR точку останова.
Чтобы сделать отладчик резидентным, выберите команду File Resident.
В командной строке DOS выполните резидентную часть TSR,
нажав ее оперативную клавишу, и работайте с программой
как обычно. При обнаружении точки останова отладчик приостанавливает TSR в начале резидентной части. Чтобы облегчить работу, синхронизируйте таблицу идентификаторов с
кодом в памяти. Идентификаторы в таблице отстоят друг от
друга на корректное число байт, но абсолютный адрес первого идентификатора не определен, так как DOS загрузила
резидентную программу по адресу в памяти, отличном от того, с которым она ассемблировалась. Поэтому, чтобы найти
первый идентификатор в памяти, используйте команду File Table.
Используйте команду File Table Relocate для помещения
первого идентификатора из таблицы идентификаторов в соответствующую ячейку памяти. Таким образом, имеющаяся информация об идентификаторах будет соответствовать вашему
коду (программе). Для этого в ответ на подсказку отладчика задайте адрес сегмента Seg вашей резидентной программы, который определен с помощью утилиты TDMEM, плюс шестнадцатиричное значение 10 (для PSP размером 256 байт).
Дизассемблированные из памяти операторы синхронизированы
с информацией из таблицы идентификаторов. В случает наличия исходного файла исходные операторы выводятся на той
же строке, что и информация из таблицы идентификаторов.
Для перехода к сегменту оперативной памяти, где находится
ваша резидентная программа, используйте команду Goto
(клавиши Ctrl-G). Это можно сделать, используя адрес сегмента вашей программы TSR, за которым следует смещение
0000H, или с помощью перехода на конкретную метку вашей
программы.
Отладьте резидентную часть программы.
Содержание раздела