ГЛАВА 7
Отладка на Уровне Символов и Исходного Текста
7.1 Введение
7.2 Подготовка к Отладке на Уровне Символов или Исходного Текста
7.2.1 Подготовка к Отладке Только на Уровне Символов
7.2.2 Подготовка к Отладке на Уровне Символов и Исходного Текста
7.3 Резервирование Памяти для Символов и Исходного Текста
7.4 Загрузка Программ и Файлов с Символами
7.4.1 Загрузка Программы, Символов и Исходного Текста
7.4.2 Загрузка только Символов и Исходных Файлов
7.4.3 Загрузка Программы Без Символов или Исходного Текста
7.5 Символьная Отладка
7.6 Отладка по Исходному Тексту
7.6.1 Использование Номеров Строк
7.6.2 Использование Режима Исходного Текста в Окне Кода
177
7.1 Введение
Soft-ICE может загружать программы, таблицы символов и исходные тексты для
расширенной отладки. Символьная отладка позволяет устанавливать точки останова
и ссылаться на переменные по символьным именам, не указывая числовые адреса.
Отладка по исходному тексту позволяет вам проходить через вашу программу на
уровне исходного текста, а не на уровне машинного кода.
Информация о символах и строках исходного текста извлекается из файла с картой
связей. Карта связей должна быть совместима с Microsoft linker версии 3.60
или выше.
Символы и исходные файлы расположены в расширенной памяти. У вас должно быть
достаточно памяти для символов и исходных файлов. Исходные файлы не читаются
с диска, как во многих отладчиках. Это позволяет Soft-ICE обеспечить полную
системную отладку на уровне исходного текста. Вы можете отлаживать резидентные
обработчики прерываний и другой системный код на уровне исходного текста.
Заметьте:
Вы не можете использовать символьную или отладку по исходному тексту, пока
Soft-ICE не загружен как драйвер устройства в CONFIG.SYS.
7.2 Подготовка к Отладке на Уровне Символов или Исходного Текста
До отладки программы с символами или исходным текстом вы должны создать файл
символов. Это - двоичный файл, содержащий информацию о символах и номерах
строк в формате, который Soft-ICE понимает. Этот файл создается при помощи
утилиты MSYM.EXE. MSYM.EXE читает вашу карту связей, чтобы создать файл
символов с расширением (.SYM).
178
7.2.1 Подготовка к Отладке Только на Уровне Символов
Для подготовки программы только к символьной отладке, вы должны выполнить
следующие шаги:
1. Скомпилировать или оттранслировать вашу программу.
2. Слинковать вашу программу с надлежащими переключателями, чтобы создать
.MAP-файл, который содержит список публичных символов.
Если вы используете Microsoft linker, необходимо
использовать переключатель /MA. Этот .MAP-файл должен
быть идентичен .MAP-файлу, созданному Microsoft
linker, версии 3.60 или выше.
3. Создать .SYM-файл, запустив MSYM.EXE.
Вот синтаксис для использования MSYM.EXE:
MSYM название-программы [.расширение]
Если расширение не указано, MSYM принимает
расширение .MAP. MSYM читает файл-карту как вход
и выдает файл символов как выход. Символьный файл
имеет название название-программы.SYM.
Заметьте:
До компилирования или трансляции вашей программы вы можете захотеть сделать
публичными некоторые дополнительные символы. При символьной отладке Soft-ICE
поддерживает только публичные символы. Методы объявления переменных или меток
публичными варьируют в зависимости от того, какой язык вы используете.
На языке ассемблера 8086, укажите директиву PUBLIC, сопровождаемую локально
определенными символами, которые вы хотите сделать публичными. Например:
PUBLIC FOO, LOOP1, STATUS
На языке C, все названия процедур и статические переменные, определенные
вне блока, являются публичными.
179
Для других языков, обратитесь к вашему руководству по языку для подробностей.
7.2.2 Подготовка к Отладке на Уровне Символов и Исходного Текста
Для подготовки программы к символьной и отладке по тексту, вы должны выполнить
следующие шаги:
1. Скомпилировать или оттранслировать все модули, которые вы хотите
отлаживать по исходному тексту с соответствующими
переключателями, чтобы поместить информацию о номерах строк в
объектные файлы. С языками Microsoft вы можете использовать
либо переключатель /Zi либо /Zd. Вы можете не хотеть,
проделывать это со всеми файлами, потому что объединенные
размеры файла символов и всех исходных файлов,
скомпилированных с этими переключателями, должны вписаться
в объем расширенной памяти, который вы зарезервировали при
помощи переключателя загрузки /SYM в CONFIG.SYS.
2. Слинковать вашу программу с надлежащими переключателями,
чтобы создать .MAP-файл, который содержит номера строк
исходного текста и список публичных символов. Если вы
используете Microsoft linker, необходимо использовать
переключатели /LI и /MA. Этот .MAP-файл должен
быть идентичен .MAP-файлу, созданному Microsoft
linker, версии 3.60 или выше.
3. Создать .SYM-файл, запустив MSYM.EXE.
Вот синтаксис для использования MSYM.EXE:
MSYM название-программы [.расширение]
Если расширение не указано, MSYM принимает
расширение .MAP. MSYM читает файл-карту как вход
и выдает файл символов как выход. Символьный файл
имеет название название-программы.SYM.
180
7.3 Резервирование Памяти для Символов и Исходного Текста
До загрузки программ, символьных и исходных файлов вы должны зарезервировать
расширенную память. Расширенная память резервируется, при загрузке Soft-ICE в
CONFIG.SYS. До резервирования расширенной памяти вы можете захотеть сложить
размеры .SYM-файла и всех исходных файлов, которые вы хотите загрузить. Вы
должны зарезервировать, по крайней мере, столько расширенной памяти. Вы должны
использовать переключатель /SYM при загрузке S-ICE.EXE. Вот пример строки
в CONFIG.SYS для загрузки Soft-ICE и резервирования места для символов и
исходных файлов:
DEVICE = S-ICE.EXE /SYM 1024
Этот пример загружает Soft-ICE в расширенную память и резервирует 1 мегабайт
памяти для символов и исходных файлов. См. часть 6.3 (Загрузка Soft-ICE
как Загружаемого Драйвера Устройства) для деталей о резервировании памяти.
7.4 Загрузка Программ и Файлов с Символами
Утилита Soft-ICE, LDR.EXE используется для загрузки программ, файлов символов
и исходных файлов. Для символьной отладки прикладных программ и T&SR-программ
вы обычно будете использовать LDR.EXE, чтобы загрузить программу, символы и
исходные файлы за один шаг. Для отладки загружаемых драйверов устройства, ПЗУ
и других системных компонент вы обычно будете использовать LDR.EXE, чтобы
загрузить только файл символов и исходные файлы.
Вот синтаксис для LDR.EXE:
LDR название-программы | название-программы.SYM |
название-программы.расширение
181
7.4.1 Загрузка Программы, Символов и Исходного Текста
Для загрузки вашей программы, символов и исходных файлов за один шаг, вы
должны использовать LDR.EXE так:
LDR название-программы
Обратите внимание, что название-программы не имеет расширения. Если расширение
не указано, LDR.EXE выполнит следующие действия:
1. Загрузит название-программы.SYM в расширенную память
2. Загрузит исходные файлы в расширенную память. Этот шаг
выполняется только, если в .SYM-файле есть записи об исходных файлах.
3. Загрузит название-программы.EXE в память, в
область, куда бы она загрузилась, если бы была загружена
непосредственно из командной строки DOS.
4. Вызовет Soft-ICE с указателем инструкций на
первой инструкции вашей программы. Если это - C-
программа и для файла, содержащего _MAIN,
загружен исходный текст, тогда исходный текст этого файла
будет видим в окне кода.
7.4.2 Загрузка только Символов и Исходных Файлов
Если вы хотите загрузить только символы и исходные файлы (например, для отлад-
ки загружаемого драйвера устройства), вы должны использовать LDR.EXE так:
LDR название-программы.SYM
Обратите внимание, что расширение .SYM - указано. .SYM-файл и исходные файлы
будут загружены в расширенную память. Когда символы загружены таким образом,
символы вашей программы или драйвера устройства будут приняты для ссылки с
адреса 0:0. Так как это - редкий случай, вы должны будете использовать команду
Soft-ICE, SYMLOC для локализации символов. См.
182
описание команды SYMLOC в главе 5.10 для полной информации.
Вот пример загрузки файла символов, называющегося DRIVER.SYM:
LDR DRIVER.SYM
7.4.3 Загрузка Программы Без Символов или Исходного Текста
Для загрузки программного файла без загрузки связанного с ним файл символов,
вы должны использовать LDR.EXE так:
LDR название-программы.расширение
Обратите внимание, что расширение файла присутствует. Обычно расширение файла
будет .EXE или .COM. Когда расширение файла определено, LDR.EXE загрузит
программу и вызовет Soft-ICE с указателем инструкций на первой
инструкции программы. Вот пример загрузки программы с символами
и исходным текстом:
LDR TEST.EXE
Примечания:
LDR.EXE автоматически сохраняет копию таблицы векторов прерываний при
загрузке вашей программы. Это эквивалентно выполнению команды VECS S. Если вы
хотите выйти из вашей программы до ее завершения, вы можете выполнить
EXIT R для выхода из программы и восстановления таблицы векторов прерываний.
Использование LDR.EXE для загрузки только название-программы.EXE часто полезно
для рестарта вашей программы, во время сессии отладки по исходному тексту.
Для рестарта выполните команду EXIT R, чтобы прервать текущую сессию. Затем
используйте LDR.EXE, для повторной загрузки вашего .EXE-файла. Символы:
исходный текст не должен загружаться, т.к. он остается в расширенной памяти.
183
Если LDR.EXE выдает вам сообщение "Out of space loading symbol
information", это означает, что вы не зарезервировали достаточно расширенной
памяти при помощи переключателя загрузки /SYM в CONFIG.SYS.
Если LDR.EXE не находит ваши исходные файлы в той же директории, что и
программа, которую вы загружаете, LDR.EXE попросит указать путь, по которому
он может найти исходные файлы. Если у вас исходные файлы в нескольких
директориях или вы часто загружаете программу, это становится тяжелым.
Вы можете устранить необходимость во вводе, используя переменную окружающей
среды DOS, SRC. LDR.EXE использует эту переменную окружающей среды, чтобы
найти исходные файлы до обращения к пользователю. Вот синтаксис для установки
переменной окружающей среды из командной строки DOS:
SET SRC = директория;директория;...;директория
В каждой из указанных директорий будет произведен поиск до обращения к
пользователю.
Ограничения:
Soft-ICE поддерживает символы только для одной программы одновременно. Если вы
загружаете новый .SYM-файл, существующий - перезаписывается.
Soft-ICE не поддерживает оверлеи или перемещения сегментов Microsoft Windows.
Soft-ICE распознает только публичные символы и номера строк. Он не
поддерживает локальные переменные.
7.5 Символьная Отладка
После того, как вы загрузили вашу программу и .SYM-файл, вы можете начинать
символьную отладку вашей программы. Вообще символ может использоваться в любой
команде вместо адреса.
184
Символы также используются несколькими командами Soft-ICE, когда выводятся
адреса. Например, команда U выводит символьные имена меток и
процедур, когда с ними сталкивается.
Есть две команды, которые полезны при символьной
отладке:
* SYM -- Используйте команду SYM, чтобы получить список
названий и значений символов или изменить значение
символа.
* SYMLOC -- Используйте команду SYMLOC, чтобы
переместить базу всех ваших символов. Вы
будете должны использовать команду SYMLOC когда:
1. Загружаете символы для загружаемого драйвера устройства
2. Загружаете символы для T&SR, который уже
загружен
3. Ваша программа перемещает себя в местоположение,
отличное от первоначального.
См. часть 5. 10 для полного описания этих команд.
7.6 Отладка по Исходному Тексту
Когда загружены исходные файлы, Soft-ICE позволяет вам просматривать и
проходить ваш исходный код как при обычной отладке. Soft-ICE предоставляет два
разных режима отладки по исходному тексту: смешанный режим и режим исходного
текста. Используйте команду SRC для переключения между режимами.
Смешанный режим выводит строки исходного текста и код ассемблера, полученный
из этих строк исходного текста, совместно. Смешанный режим полезен, когда вы
должны отлаживать на уровне ассемблера, но использовать исходный текст для
ссылки. Смешанный режим обеспечивается и когда окно кода видимо и когда нет.
185
Режим исходного текста строго выдает на экран строки исходного текста. Отладка
по исходному тексту требует, чтобы окно кода было видимо.
7.6.1 Использование Номеров Строк
Номера строк могут использоваться вместо адресов в нескольких командах. Для
отличия номера строки от фактического адреса, поместите знак . (точка) перед
номером. Например, чтобы установить точку останова на выполнение в строке
исходного текста 450, введите:
BPX .450
7.6.2 Использование Режима Исходного Текста в Окне Кода
Для входа в режим исходного текста, должно быть видимо окно кода. Если оно
невидимо, используйте команду WC, чтобы сделать его видимым. Однажды войдя в
режим исходного кода, вы можете использовать команды Soft-ICE, переключаться
на другой исходный файл, просматривать исходный текст в любом месте файла,
пролистывать файл, искать строки в файле и устанавливать точки останова в
файле. Для полной информации следующих команд см. их описания в главах 4 и 5.
Следующий список - краткий обзор команд, полезных при отладке по
исходному тексту:
* Сделать окно кода видимым (если оно еще не видимо)
командой WC.
* Переключить между режимом исходного текста, смешанным и режимом кода
командой SRC. Для переключения режимов введите:
SRC
186
* Поместить исходный файл в окно кода (если он еще не
там) командой FILE. Например, для
перехода от текущего файла к файлу MAIN.C введите:
FILE MAIN.C
* Вывести исходный текст с определенной позиции в
исходном файле командой U. Чтобы изменить
вывод на определенную строку или адрес памяти
используйте команду U. Вы можете указывать фактические
адреса или номера строк как параметры для
команды. Например, чтобы просмотреть исходный текст в
окне кода, начиная со строки исходного текста 450, введите:
U. 450
* Найти текущую инструкцию в окне кода
командой . (точка).
* Искать определенную символьную строку командой
SS. Например, чтобы искать строку
"Hello World", начиная со строки 100 в текущем
исходном файле, введите:
SS 100 "Hello World"
* Переместить курсор в окно кода (если он еще не
там) командой EC.
* Листать исходный текст клавишами вверх, вниз,
PageUp, PageDn.
* Установить точку останова типа point-and-shoot командой
BPX. Просто поместите курсор в строку исходного
текста, на которой вы хотите остановиться, затем введите:
BPX
~~\ Перевел Сергей Середа, 1998, Кишинев 24-71-96, /~~
~~\ e-mail: serge_sereda@hotmail.com /~~
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|