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



 

Часть 9

  
                                      - 83 -
               
               
                            9. КОМАНДЫ АНАЛИЗА ПРОГРАММ
               
               
               
                                    СОДЕРЖАНИЕ
                                                                   
               
                                                                   Лист
               
               9.   Команды анализа программ......................... 83
               9.1. Введение......................................... 84
               9.2. Команда "Установить уровень отладки" (S)......... 84
               9.3. Команда "Дезассемблировать" (U).................. 85
               9.4. Команда "Просмотр исходного текста" (V).......... 87
               9.5. Команда "Текущее расположение" (.)................88
               9.6. Команда "Стек вызовов" (K)....................... 89
           
         
         
.
                                      - 84 -
         
         
               
               9.1. Введение
                
               В  этой  главе описаны команды, позволяющие контролировать и
         менять программный код. Вот они:
                
                  Команда                       Действие
                Установка режима          Установка формата экранного
                    (S)                   вывода.
                
                Дезассемблировать         Просмотр       ассемблерных
                    (U)                   инструкций
                    
                Просмотр(V)               Просмотр  строк   исходного
                                          текста.
                
                Текущее расположение      Просмотр текущей строки (?)
                    (.)
                
                Стек вызовов              Просмотр  вызвавших функций
                    (K)                   и процедур.
                                                                        
               
               9.2. Команда "Установить уровень отладки" (S)
                
               Эта команда устанавливает режим, в котором выводится на  эк-
         ран  отлаживаемый  код.  Отладчик может выводить программный код в
         трех режимах: в режиме исходного текста, в котором отладчик  рабо-
         тает  на уровне строк исходного текста, в режиме ассемблера, в ко-
         тором отладчик работает с ассемблерными инструкциями, и  смешаннoм
         режиме, являющемся комбинацией двух предыдущих.
               В  последовательном  режиме это действительно три режима, их
         переключение изменяет вывод таких команд,  как  Регистр, Трассиро-
         вать, Программный шаг, Дезассемблировать.
               В  оконном  режиме  есть  только два режима: режим исходного
         текста и ассемблерный, вид которого, однако, можно  варьировать  с
         помощью  команд  из Option меню (см. раздел 3.1.3.6."Использование
         Option меню").
               Использование cмешаннoгo режимa и  режимa  исходного  текста
         возможны  только  тогда,  когда  отлаживаемый  файл  подготовлен в
         CodeView формате. При отладке файлов, не имеющих CodeView информа-
         ции (а, также, и .COM файлов), эти режимы невозможны.

               Mouse.
               Для установки режима экрана mouse'ом, "укажите" View-заголо-
         вок из строки меню и "вытащите" Assembly или Sourse команду.
               Для модификации ассемблерного текста  пользуйтесь  командами
         из Option меню.
           
               Клавиатура.
               Для изменения текущего  режима  экрана  спецключами  нажмите
         функциональный  ключ  F3,  который переключит вас в альтернативный
         режим.
               Для модификации ассемблерного текста  пользуйтесь  командами
         из Option меню.

                                      - 85 -
         
         
           
               Диалоговая.
               Для  изменения текущего режима экрана введите диалоговую ко-
         манду в следующем синтаксисе:
               S[-:+:&]
               Если специфицирован плюс (S+), отладчик переключится в режим
         исходного текста и выдаст сообщение sourse.
               Если специфицирован минус (S-), отладчик переключится в  ре-
         жим  ассемблера  и выдаст сообщение assembly. В оконном режиме от-
         ладчик переключится в ассемблерный режим, специфицированный опция-
         ми из Option меню. Mixed опция при этом будет отключена.
               Если специфицирован амперсанд (S&), отладчик переключится  в
         смешанный  режим и выдаст сообщение mixed. В оконном режиме отлад-
         чик переключится в ассемблерный режим,  специфицированный  опциями
         из Option меню. Mixed опция при этом будет включена.
               Если  команда  была вызвана без аргумента, отладчик высветит
         текущий режим (source, assembly, mixed).
               Примечание:
               Команды 286 процессора не выводятся в ассемблерном или  сме-
         шанном режиме.
               Примеры:
                >S+
                source
                >S-
                assembly
                >S&
                mixed
                >
               Примеры  переключения  в режим исходного текста, в режим ас-
         семблера и смешанный режим.


               9.3. Команда "Дезассемблировать" (U)
                
               Команда дезассемблировать предназначена для  показа  ассемб-
         лерных  инструкций отлаживаемых программ. Она очень полезна в пос-
         ледовательном режиме, где является единственным методом  просмотра
         ассемблерных команд программы.
               В оконном режиме код можно просматривать в окне отладки.
               
               Mouse.
               Не  существует  оконного  эквивалента команде дезассемблиро-
         вать, но просматривать интересующий вас кусок кода можно  в  любое
         время,  переключившись в режим ассемблера и пролистав экран в нуж-
         ное место (см. раздел 9.1"Установка экранного режима").
                
               Клавиатура.
               Не существует оконного  эквивалента  команде  дезассемблиро-
         вать,  но  просматривать интересующий вас кусок кода можно в любое
         время, переключившись в режим ассемблера и пролистав экран в  нуж-
         ное место (см. раздел 9.1"Установка экранного режима").

               Диалоговая.
               Для  выполнения команды дезассемблировать введите диалоговую
         команду в следующем синтаксисе:

                                      - 86 -
         
         
                U[<адрес>:<отрезок>]
               В последовательном режиме, если  не  был  специфицирован  ни
         <адрес>,  ни  <отрезок>, будет выведено 8 ассемблерных инструкций,
         начиная с текущего адреса дезассемблирования.
               Текущий адрес дезассемблирования -- адрес, следующий за пос-
         ледней инструкцией, выведенной дезассемблерной командой, или адрес
         текущей команды, если команда дезассемблировать не была введена ни
         разу.
               Если был специфицирован <адрес>, то команда выведет 8 ассем-
         блерных  команд с заданного адреса, если был специфицирован <отре-
         зок>, то будут выведены все команды этого отрезка.
               Формат вывода определяется текущим режимом экрана (см раздел
         9.1."Установка режима экрана"). В режиме исходного текста (S+) или
         смешанном режиме (S&) отладчик выводит вместе с ассемблерными инс-
         трукциями строки исходного текста. В ассемблерном режиме выводятся
         только ассемблерные инструкции.
               В оконном режиме команда дезассемблировать переводит экран в
         режим ассемблера и демонстрирует в окне отладки место,  специфици-
         рованное <адресом> или <отрезком>.
               Если  ни <адрес> ни <отрезок> не заданы, то команда демонст-
         рирует следующий экран вывода.
               Примечание:
               Команды 286 процессора не выводятся в ассемблерном или  сме-
         шанном режиме.
               Пример:
                
           >S&          ; * Пример 1
           mixed
           >U 0x11
           4E21:0011 8BEC        MOV       BP,SP
           4E21:0013 B82800      MOV       AX,0028
           4E21:0016 E8060C      CALL      __chkstk (0C1F)
           4E21:0019 57          PUSH      DI
           4E21:001A 56          PUSH      SI
           29:          char inword=FALSE;
           4E21:001B  C646DC00   MOV       Byte Ptr [inword], 00
           31:          if (argc>1)  name=argv[1];
           4E21:001F 837E0401    CMP       Word Ptr [argc], 01
           4E21:0023 7F03        JG        _main+18  (0028)

           >S-        ;
               
               Пример 2
               
           assembly
           >U 0x11
           4E21:0011 8BEC        MOV       BP,SP
           4E21:0013 B82800      MOV       AX, 0028
           4E21:0016 E8060C      CALL      __chkstk (0C1F)
           4E21:0019 57          PUSH      DI
           4E21:001A 56          PUSH      SI
           4E21:001B C646DC00    MOV       Byte Ptr [inword], 00
           4E21:001F 837E0401    CMP       Word Ptr [argc], 01
           4E21:0023 7F03        JG        _main+18 (0028)
           >

                                      - 87 -
         
         
           
               
               9.4. Команда "Просмотр исходного текста" (V)
                
               Команда  просмотра  предназначена для просмотра строк файлов
         исходного текста (текста исходных модулей и include  файлов).  Она
         очень полезна в последовательном режиме, где является единственным
         методом просмотра текста. В оконном режиме команда просмотра может
         быть использована для перехода в другое место файла исходного тек-
         ста или загрузки нового текстового файла.
               
               Примечание:
               Просматриваемый  файл должен быть текстовым, т.е. он не дол-
         жен в первых 128 байтах содержать графические  символы  и  русские
         буквы.
                
               Mouse.
               Для  загрузки  нового файла исходного текста "укажите" File-
         заголовок из строки меню и "вытащитe" Load команду.
               Открывшееся окошко диалога запросит имя  файла,  который  вы
         хотите  просмотреть.  Введите  его и его path-путь и нажмите Enter
         или кнотку mouse'а.
               Не существует оконного эквивалента команде просматривать, но
         просматреть интересующее вас место текущего файла  можно  можно  с
         помощью команд листания (см. главу 3"CodeView экран").
                
               Клавиатура.
               Для  загрузки нового файла исходного текста спецключами, на-
         берите ALT+F и ALT+L ключи для вызова Load команды из  File  меню.
         Открывшееся  окошко  диалога запросит имя файла, который вы хотите
         просмотреть. Введите его и его path-путь и нажмите Enter или кнот-
         ку mouse'а.
               Не существует оконного эквивалента  команде  просматривать,
         но  просмотреть интересующее вас место текущего файла можно с по-
         мощью команд листания (см. главу 3"CodeView экран").
         
               Диалоговая.
               Для  просмотра  строки исходного текста выполните диалоговую
         команду в следующем синтаксисе:
                V[<адресное выражение>]
               Так как адрес часто специфицируется как адрес строки  исход-
         ного текста, то синтаксис команды имеет, обычно, более специфичный
         вид:
                V[.[<имя файла>:]<номер строки>]
               Эффект  oт  выполнения команды различен в последовательном и
         оконном режимах. В последовательном режиме команда выведет  восемь
         строк текста, начиная с адреса:
               - с текущей строки, если адрес выражения отсутствует;
               - сo специфицированной строки специфицированного файла. Если
         <имя файла> указано, то перед выполнением произойдет его загрузка;
               - с адреса, специфированного <адресным выражением>.
               <Адресное выражение> должно быть меткой или  <сегмент>:<сме-
         щение>  выражением. Если <сегмент> не указан, по умолчанию берется
         CS сегмент.
               При вводе команды в оконном режиме CodeView вывод экрана ав-

                                      - 88 -
         
         
         томатически переключается в режим исходного текста и в окне отлад-
         ки высвечивается текст,  специфицированный  <адресным  выражением>
         или <номером строки>. Если указано <имя файла>, произойдет загруз-
         ка требуемого файла.
               Если команда просмотра была введена без аргументов, отладчик
         пролистнет экран отладки вниз на страницу.
         
               Примечание:
               Команда просмотра без аргументов эквивалентна выполнению ко-
         манд PGDN (страница вниз) и "строка вверх" mouse'ом (см главу 3).
               
               Примеры:
           >V countwords      ; * Пример 1
           58:     char inword;
           59:     int numread;
           60:         {
           61:         int count;
           62:
           63:         bytes+=numread;
           64:         for (count=0; count<=numread; ++count)  {
           65:              char code;
           
           >V .math.c:30     ;* Пример 2
           30:    register int j;
           31:
           32:    for (j=q; j>=0; j--)
           33:       if (t[j] + p[j] > 9) {
           34:           p[j]+=t[j] - 10;
           35:           p[j-1]+=1;
           36:       } else
           37:           p[j]+=t[j];
           >
           

                
               9.5. Команда "Текущее расположение" (.)
                           
               Команда текущее расположение выводит текущую строку исходно-
         го текста или ассемблерную инструкцию.
                
               Mouse.
               Эту команду нельзя ввести mouse'ом.
                
               Клавиатура.
               Эту команду нельзя ввести спецключами.
                
               Диалоговая.
               Для выполнения команды текущее расположение введите диалого-
         вую команду в следующем синтаксисе:
                
               В последовательном режиме команда выводит текущую строку ис-
         ходного текста  независимо от режима вывода отладчика (S+:-). Если
         символьная информация отсутствует, команда игнорируется.
               В оконном режиме после выполнения этой команды текущая стро-
         ка  или  ассемблерная  инструкция,  помеченная строкой выполнения,

                                      - 89 -
         
         
         окажeтся в центре экрана. Эта команда полезна для  возвращения  на
         место отладки после листания программы.
               Пример.
                >.
                for(i=0; i<=SIZE ; i++) ;
                >
                
                
               9.6. Команда "Стек вызовов" (K)
                
               Команда  "стек вызовов" позволяет просматривать список функ-
         ций, вызвавших текущую. Команда распечатывает список активных фун-
         кций в порядке, обратном их активации.
               Вместе с именем функций распечатываются и текущие  значения
         их аргументов в текущем радиксе (по умолчанию в десятичном).
               Термин "стек вызовов" употреблен потому, что во время выпол-
         нения вызова/возврата аргументa и адрес возврата укладываются/изв-
         лекаются в/из стека.
               Для  C  программ  самой  последней  в  списке  будет функция
         main().
               Примечание:
               При отладке ассемблерных программ команда "стек вызовов" вы-
         полнима только тогда, когда вызовы процедур выполняются по C  сог-
         лашению.  Это  соглашение  описано  в главе 10"Интерфейс с другими
         языками" MicroSoft C Compiler User's Guide.

               Mouse.
               Для просмотра стека  вызовов  "укажите"  Calls-заголовок  из
         строки меню и нажмите любую кнопку mouse'а. Открывшееся окошко бу-
         дет содержать список активных функций и их аргументов.
               Для  просмотра  кода  интересующей вас функции "вытащите" ее
         заголовок.
                
               Клавиатура.
               Для просмотра стека вызовов спецключами, наберите ALT+С ключ
         для открытия Calls-меню. Открывшееся окошко будет содержать список
         активных функций и их аргументов.
               Для просмотра кода интересующей вас функции выберите ее  за-
         головок,  перемещая  подсветку  ключами  <стрелка  вниз>, <стрелка
         вверх>, и нажмите Enter.

               Диалоговая.
               Для просмотра стека вызовов  диалоговой  командой  выполните
         команду в следующем синтаксисе:
               K
               В  результате ее выполнения в диалоговом окне (для оконного
         режима) появится аналогичный список активных функций,  содержащий
         имена, аргументы функций и номер строки, на которой было прервано
         ее  выполнение.  Просмотр места, c которого был произведен вызов,
         осуществляется с помощью команд дезассемблирования и просмотрa.
               Диалоговая команда в оконном режиме необходима  лишь  тогда,
         когда список функций (или их аргументов) слишком длинен и не поме-
         щается в Calls окошко.
               Пример:
                >K

                                      - 90 -
         
         
                analize(67,0),line 94
                countwords(0,512),line 73
                main(2,5098),line 42
                >
.
                                      
         
         


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