ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 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.
                
                


Яндекс цитирования