ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 4 - 41 - 4. ДИАЛОГОВЫЕ КОМАНДЫ СОДЕРЖАНИЕ Лист 4. Диалоговые команды.............................. 41 4.1. Введение........................................ 42 4.2. Ввод команд и аргументов........................ 42 4.2.1. Употребление спецключей......................... 42 4.2.2. Использование командного буфера................. 43 4.3. Формат CodeView команд и их аргументов...........43 4.4. "C"выражения.....................................44 4.4.1. Идентификаторы.................................. 45 4.4.2. Константы....................................... 45 4.4.3. Регистры........................................ 45 4.4.4. Адреса.......................................... 46 4.4.5. Адресные отрезки................................ 47 4.4.6. Номера строк.....................................47 4.4.7. Строковые константы............................. 47 . - 42 - 4.1. Введение CodeView диалоговые команды употребляются в последователь- ном режиме или диалоговом окне. В последовательном режиме это единственный метод ввода команд, в оконном режиме диалоговые ко- манды используются для ввода команд, либо не имеющих оконного аналога, либо требующих расширенный аргумент. Обычно, оконные версии команд удобнее, но диалоговые мощ- нее. Например, установка точек останова в строке исходного текста выглядит так: передвижение курсора (либо указателя mouse'а) на интересующую строку и нажатие F9 (или левой кнопки mouse'а). Диа- логовая версия требует больше усилий для ввода, но она позволяет специфицировать адрес, количество проходов, строку команд, выпол- няемых после останова. В остальной части этой главы объясняется, как вводить диа- логовые команды и специфицировать их аргументы. 4.2. Ввод команд и аргументов Диалоговые команды вводятся в ответ на CodeView приглашение '>'. После набора команды и аргументов для ее выполнения необхо- димо нажать Enter. В оконном режиме можно вводить команды, не обращая внимания на то, есть или нет курсор у CodeView приглашения. Текст при этом возникает в текущем месте диалогового окна. 4.2.1. Употребление спецключей При вводе диалоговых команд и просмотре можно употреблять следующие спецключи: Ключ Действие CTL+C Снятие текущего вывода или CTL+BREAK текущей командной строки. Например, при длинном выводе дамп команды CTL+C (CTL+BREAK) прервет вывод и вернет CodeView приглашение. Если вы сделали ошибку при вводе команды, нажмите CTL+C для ее отмены. Примечание. Опция стартового запуска CodeView /D запрещает CTL+C ключ. Более детально см. раздел 2.3.8. CTL+S Пауза в выводе. Команда приостанавливает выдачу на экран. Для продолжения вывода необходимо нажать любой ключ. Команда полезна, например, при просмотре длинного дампа. - 43 - BACKSPACE Удаление предыдущего символа в командной строке и передвижение курсора назад. 4.2.2. Использование командного буфера В оконном режиме CodeView отладчик имеет буфер, содержащий последние 4K (приблизительно 3 экрана) протокола диалогового ок- на. Когда курсор находится в диалоговом окне, вы можете листать протокол, просматривая предыдущую работу. Описание команд листа- ния окна дано в разделах 3.1.1.1. и 3.1.2.1. Это особенно полезно для просмотра вывода дамповых команд, чей вывод не умещается в диалоговом окне. Пролистав диалоговое окно, можно вводить последующие коман- ды, не обращая внимание на то, что их текст наложится на листинг. Все равно команда разместится в конце буфера и, пролистав буфер назад, вы убедитесь, что листинг не испорчен. При старте отладчика буфер пуст; при переполнении буфера происходит стирание начала листинга диалогового окна. 4.3. Формат CodeView команд и их аргументов. Формат CodeView команд аналогичен формату команд предыдущих MicroSoft отладчиков SYMDEB'а и DEBUG'а. Однако некоторые опера- торы и выражения отличны. Общий формат CodeView команд следующий: <команда> [<аргументы>] [;<следующая команда>] <Команда> -- это имя команды, <аргументы> -- "C"выражения, представляющие значения или адреса для использования командами. Обычно первый аргумент располагается непосредственно за командой (без пробела). Число аргументов для различных команд различно; если коман- да требует более двух аргументов, то они должны разделяться про- белами. Точка с запятой ';' используется как разделитель при за- дании нескольких команд в одной строке. CodeView не чувствителен к большим и малым буквам в именах команд, но, как соглашение для ясности, в примерах этого руковод- ства команды пишутся заглавными буквами, а их аргументы малыми. Примеры: >DB 100 200 ; * Пример 1 >U label1 ; * Пример 2 >U label2 ; * Пример 3 Пример 1 -- DB (дамп-байтовая команда) с аргументами 100 и 200 ; вторая команда строки -- команда комментария. Точка с запя- той используется как разделитель команд. Примеры 2,3 -- команда дезассемблировать. - 44 - 4.4. "C"выражения CodeView аргументы всегда состоят из "C"выражений. Выраже- ния должны состоять из идентификаторов, других доступных имен, констант, регистров, операций. Выражения имеют 8-, 16- или 32-би- товое значение, используемое CodeView как аргументы (адреса). CodeView использует операции, аналогичные "C"операциям, и одну специфичную CodeView-операцию -- ':'. CodeView операции соб- раны в таблице 4.1 в порядке старшинства. Таблица 4.1. ----------------------------------------------------------------- Уровень Операции старшинства ----------------------------------------------------------------- (Наивысший) 1 () [] -> . 2 ! ~ - (тип) ++ -- * & sizeof 3 * / % : 4 + - 5 < > <= >= 6 == != 7 && 8 || 9 = += -= *= /= %= (Наименьший) ----------------------------------------------------------------- В 2 перечислены унарные операции. ----------------------------------------------------------------- Употребление "C"операций описано в MicroSoft C Compiler Language Referens. Двоеточие ':' -- CodeView операция, она используется как <сегмент>:<смещение> разделитель (см. раздел 4.4.3 "Регистры"). Точка '.' приминяется в CodeView не только как селектор, но и для спецификации локальных переменных функций, вызвавших теку- щую. Синтаксис этого обращения показан ниже: <функция>.<переменная> <Функция> должна быть функцией, вызвавшей данную, а <пере- менная> -- ее локальной переменной. Переменная не может быть ре- гистровой. (Тип)-операция должна определять только предопределенные "C" типы. CodeView ограничивает указатели одним уровнем кос- венности. Например (char *)sym разрешено, а (char **)sym -- нет. При использовании "C"выражений в командах с несколькими ар- гументами, "C"выражения не должны содержать пробелы. Например, count+6 -- это один аргумент, а count + 6 CodeView проинтерпрети- рует как 3 аргумента. Примечание: При обращении к еще неопределенным переменным CodeView вы- дает сообщение: "Unknown symbol". - 45 - 4.4.1. Идентификаторы Синтаксис <Имя> Идентификатор -- имя, представляющее регистр, абсолютное значение, сегментный адрес, смещение. Идентификаторы (как и дру- гие доступные имена) -- это имена, допускаемые транслятором. Примечание: CodeView команды не чувствительны к большим и малым буквам в командах, но чувствительны к ним в именах, если соответствующая опция из Option меню не выключена. В ассемблерном режиме или в выводе команд контроля имен CodeView высвечивает некоторые имена в объектном формате, содер- жащем впереди символ подчеркивания. Например, функция main будет видна в ассемблерном режиме как _main. Только глобальные метки (такие как имена процедур) высвечиваются в этом формате. При упо- минании этих имен вы не обязаны писать символ подчеркивания, но метки из библиотеки времени исполнения, содержащие два подчерки- вания впереди, должны писаться с этими подчеркиваниями. Например: __chrstk. 4.4.2. Константы Синтаксис Формат цифры Десятичный формат 0цифры Восьмеричный формат 0xцифры Шестнадцатеричный формат 0nцифры Альтернативный десятичный формат Константы используются в CodeView командах для представле- ния целых значений. Они могут состоять из 8-,10-,16-ричных цифр и вводятся в текущем радиксе (см.раздел 11.3"Радикс-команда"), если формат константы не указан. По умолчанию CodeView стартует в 10-тичном радиксе. Если текущий радикс не 10-тичный, для ввода 10-тичных чисел используется альтернативный вариант. В 16-ричном радиксе константа, начинающаяся с буквы (A,B,C,D,E,F), воспринимается как имя, поэтому ее нужно записы- вать в 0x... виде. В таблице 4.2 показан вид одного и того же числа (63) в различных радиксах и форматах. Таблица 4.2. ----------------------------------------------------------------- Радикс 8-ричный 10-тичный 16-ричный ----------------------------------------------------------------- 8 77 0n63 0x3F 10 077 63 0x3F 16 077 0n63 3F ----------------------------------------------------------------- 4.4.3. Регистры Синтаксис [@]регистр - 46 - Для того чтобы ссылаться на текущие значения регистров, не- обходимо уметь специфицировать их имена. Регисты редко нужны при отладке в "C" режиме, но они часто используются для ассемблерной отладки. При спецификации идентификатора CodeView ищет имя в таблице имен, если его там нет, то среди регистров. Используйте префикс @ для восстановления уникальности имен регистров. Например, вы имеете переменную AX и хотите использо- вать регистр AX. В этом случае обращайтесь к нему как к @AX. Имена регистров, известных CodeView: Таблица 4.3. Регистры ----------------------------------------------------------------- Тип Имя ----------------------------------------------------------------- 16-битовые основные AX, BX, CX, DX 8-битовые верхние AH, BH, CH, DH 8-битовые нижние AL, BL, CL, DL 16-битовые сегментные CS, DS, SS, ES 16-битовые указатели SP, BP, IP 16-битовые индексные SI, DI ----------------------------------------------------------------- 4.4.4. Адреса Синтаксис [<сегмент>:]<смещение> Адрес специфицируется в CodeView при помощи операции двое- точие ':' в виде <сегмент>:<смещение>, где <сегмент> и <смещение> -- "C"выражения. Полный адрес -- это <сегмент> и <смещение>, разделенные двоеточием. На практике адрес -- это только <смещение>; к нему добавляется сегмент умолчания. Умалчиваемые <сегменты> различны для различных команд. Ко- манды управления данными (Dump, Watch, ...) используют DS ре- гистр. Команды управления кодом (ассемблер, установ точек остано- ва, ...) используют CS регистр. Полный адрес редко необходим в отладке. Он может понадо- биться для ссылки на адрес не из программы, например, BIOS'а или MS-DOS'а. Полный адрес эквивалентен "C"выражению, используемому как far указатель на char: 1234:5678 эквивалентен (char far *)1234:5678. Примеры: >DB 100 ; * Пример 1 >DB array[count] ; * Пример 2 >DB label+10 ; * Пример 3 >DB 0x800:0xFF ; * Пример 4 В примере 1 DB дамп-команда используется для дампирования памяти с адреса <смещение> 100. По умолчанию к смещению добавля- ется <сегмент> из регистра DS -- DS:100. В примере 2 DB дамп-ко- манда используется для дампирования памяти с адреса array[count]. В примере 3 DB дамп-команда используется для дампирования памяти с адреса label+10. По умолчанию к смещению добавляется <сегмент> из регистра CS -- CS:100. В примере 4 DB дамп-команда использует- - 47 - ся для дампирования памяти с адреса 0x800:0xFF. 4.4.5. Адресные отрезки Синтаксис <Начальный адрес> <Конечный адрес> <Начальный адрес> L<Счетчик> Отрезок - пара адресов, связанных с последовательностью байтов памяти. Отрезок специфицируется двумя способами: один из них - ука- зание адресов начала и конца; в этом случае отрезок содержится между ними. Если второй адрес не указан, CodeView часто берет длину отрезка по умолчанию (обычно 128 байт). Отрезок также можно специфицировать, указав стартовый адрес и количество объектов, содержащихся в нем. Этот тип отрезка назы- вается объектным отрезком; <начальный адрес> специфицирует первый элемент, <счетчик> - количество объектов данного типа: для коман- ды DB -- байт, DW -- слов, для U -- ассемблерных инструкций. Примеры: >DB buffer ;* дамп 128 байт buffer'a >DB buffer buffr+20 ;* дамп 20 байт buffer'a >DB buffer L20 ;* дамп 20 байт buffer'a >U label-30 label ;* 30 ассемблерных команд перед меткой label. 4.4.6. Номера строк Синтаксис .[<имя файла>:]<номер строки> Адрес, соответствующий номеру исходной строки, специфициру- ется ее номером с префиксной точкой '.'. Если не было специфици- ровано имя файла, CodeView возьмет эту строку из текущего файла исходного текста. CodeView выдает сообщения об ошибке, если файл не найден или не найдена специфицированная строка. Примеры: >V .100 ; * просмотреть 100 строку текущего файла >V .sampele.c:100 ;* просмотреть 100 строку текущего файла. 4.4.7. Строковые константы Синтаксис "<заканчивающаяся нулем строка>" Формат строковых констант аналогичен "C" формату. Пример: >EA message "This \"string\" is okay" Пример использования EA (ввод в ASCII формате) для ввода строки по адресу переменной message. |