Команда установки режима индикации

Синтаксис:

S-|+|&

Команда S устанавливает режим выдачи на дисплей, которому SYMEB будет в дальнейшем придерживаться.

По командеS+ SYMDEB будет выдавать на экран информацию в терминах линий исходного текста программы. КомандаS- устанавливает режим выдачи реассемблированного кода программы. Команда S&обеспечивает обе эти функции. Первоначальным умалчиваемым режимом является S&.

Команда S имеет смысл лишь при работе с программами на языке высокого уровня. Для ассемблерных программ автоматически устанавливается режим S-.

Если символьный план не открыт или не содержит информацию о линиях исходной программы, SYMDEB игнорирует все последующие запросы на выдачу исходных линий. В режиме S& SYMDEB выдает исходную линию, содержащую инструкцию, на которую указывает пара регистров CS и IP.

Команда S оказывает влияние на работу последующих команд реассемблирования U.

Команда S влияет также на работу команд R, T и Р. В режиме S+ эти команды выдают за раз одну исходную линию, которая может соответствовать нескольким реассемблированным инструкциям. В режиме S- выдается только реассемблированный код. В режиме S& выдаются реассемблированный код и номера линий.

Исходные линии выдаются в виде:

<номер линии>: <исходный текст>

Исходные линии при выдаче предшествуют реассемблированным инструкциям.

Всякий раз, когда SYMDEB первый раз обращается к исходному тексту, он ищет в текущем подоглавлении файл с тем же базовым именем, что и соответствующий символьный файл. При неудачном поиске SYMDEB выдает на консоль запрос об имени исходного файла. Если в ответ на него нажать клавишу ENTER, не указав имени, SYMDEB подавит выдачу исходных линий, вместо которых тогда будут выдаваться имя плана и номер линии. Эту процедуру нужно производить при работе с программами, сформированными ранними версиями (до 3.31) компиляторов FORTRAN и PASCAL.

Временный выход в DOS

Синтаксис:

! [<команда DOS>]

Команда !позволяет выполнить COMMAND.COM и команды MS-DOS вне SYMDEB. COMMAND.COM выполняется без аргументов с сохранением контекста отладки. Для возврата в SYMDEB служит команда MS-DOS EXIT.

Если в команде! задана команда DOS, производится выполнение этой команды и автоматический возврат в SYMDEB.

Использование команды ! требует дополнительной памяти. Для более экономного использования памяти рекомендуется предусматривать в ассемблерных программах вызов DOS с функцией 4Ah, который освободит неиспользуемую память. Тот же эффект дает опция LINK /CPARMAXALLOC. Программы на языке C, обработанные компилятором MICROSOFT C версии 3.0 и выше, освобождают ненужную память автоматически, если была выполнена процедура _main. SYMDEB также освобождает неиспользуемую им память.

В команде! не может быть использован ограничитель ;, так как весь текст после ! передается в COMMAND.COM и будет интерпретироваться как командная строка DOS.

Для размещения копии COMMAND.COM SYMDEB использует переменную COMSPEC команды DOS SET.

Команда выдачи кода исходной линии

Синтаксис:

.

По этой команде выдается код исходной линии невзирая на режим, установленный командой S.

Команда не может быть использована при работе с ассемблерными программами.

Команда трассировки стека

Синтаксис:

K [<число>]

Эта команда позволяет увидеть текущий кадр стека. Первая строка трассы содержит имя текущей процедуры, ее аргументы, имя файла и номер линии, вызвавшей процедуру. Следующая строка описывает вызвавшую процедуру. Если число аргументов процедуры переменно или неизвестно, SYMDEB использует специфицированное в команде K число, которое задает число слов параметров.

Команда Kработает только при соблюдении стандартных соглашений о связях, в противном случае она игнорируется.

Команда установки символа

Синтаксис:

Z <символ> <значение>

В результате выполнения команды Z указанный символ будет связан со специфицированным значением адресом.

T-трассировка

Синтаксис:

T [=<адрес начала>] [<счетчик>]

КомандаT выполняет задаваемую адресом инструкцию и затем выдает на дисплей в формате команды Rтекущее содержимое всех регистров и флагов.

Если <адрес> опущен, выполняется инструкция по адресу, определяемому регистрами CS и IP.

Счетчик, если он присутствует, задает число инструкций, которые будут выполнены до останова. Выдача регистров и флагов при этом будет осуществляться после выполнения каждой инструкции до начала выполнения следующей.

В отличие от P-трассировки T-трассировка не прекращается при вызове процедуры или прерывании. Исключение составляет лишь прерывание с номером 21h (функция DOS).

Трассировка будет идти лучше, если не использовались средства оптимизации данного языка.

С помощью команды T можно трассировать инструкцию в ROM (read-only memory).

Формат и объем выдаваемой информации существенно зависит от режима, установленного командой S.

Команда реассемблирования

Синтаксис:

U [<границы>]

По команде U на дисплей выдаются реассемблированные инструкции и/или предложения исходной программы. Формат вывода зависит от режима, установленного командой S, и от языка, на котором была написана программа. Если отлаживаемая программа была обработана MASM или несовместимым с SYMDEB компилятором, принудительно устанавливается режим S-. В режимахS+ и S& при работе с программами, выработанными совместимыми с SYMDEB компиляторами, по команде U выдаются линии исходного текста и реассемблированные инструкции (одна исходная линия для каждой соответствующей группы предложений Ассемблера). Исходные линии считываются из исходного файла. Инструкции для реассемблирования берутся из блока памяти в указанных в команде границах.

В отличие от команд T и P, для команды U режимы S+ и S& совпадают. Для обоих режимов (исходного и смешанного) SYMDEB требует, чтобы вместе с программой был загружен и символьный план, содержащий информацию о номерах строк исходной программы. При отсутствии этой информации исходные линии не выдаются.

Если <границы> опущены, обрабатываются первые 8 линий кода по текущему адресу реассемблирования. Текущим адресом реассемблирования является адрес первого байта (линии) после последнего байта (линии), выданного предыдущей командой U. Защищенные инструкции процессора 80286 не могут быть реассемблированы.

Наши рекомендации