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



 

Часть 3

                                                                
                                     - 20 -
           
           
                                                        
                                 3. CODEVIEW ЭКРАН
                                              
               
               
                                    СОДЕРЖАНИЕ
               
                                                                     Лист
           
               3.       CodeView экран................................ 20
               3.1.     Введение...................................... 21
               3.2.     Работа в оконном режиме....................... 21
               3.2.1.   Ввод команд спецключами....................... 22
               3.2.1.1. Передвижение текста и курсора спецключами..... 22
               3.2.1.2. Изменение экрана спецключами.................. 23
               3.2.1.3. Контроль выполнения программы спецключами..... 24
               3.2.1.4. Выбор меню-команд спецключами................. 25
               3.2.2.   Выбор меню-команд mouse'ом.................... 25
               3.2.2.1. Изменение экрана mouse'ом..................... 26
               3.2.2.2. Контроль выполнения программы mouse'ом........ 26
               3.2.2.3. Выбор меню-команд mouse'ом.................... 27
               3.2.3.   Применение меню-команд........................ 28
               3.2.3.1. Применение FIle-меню-команд................... 28
               3.2.3.2. Применение Search-меню-команд................. 30
               3.2.3.3. Применение View-меню-команд................... 31
               3.2.3.4. Применение Run-меню-команд.................... 32
               3.2.3.5. Применение Watch-меню-команд.................. 33
               3.2.3.6. Применение Option-меню........................ 35
               3.2.3.7. Применение Calls-меню......................... 37
               3.2.4.   Help-система.................................. 38
               3.3.     Последовательный режим работы................. 39
.
                                      - 21 -
         
         
           

                                      
           
           
               3.1. Введение

               
               CodeView имеет два режима диалога: оконный и последователь-
         ный. Оба режима полезны, но оконный эффективнее и удобнее.
               Все пользователи предпочитают оконный режим, если, конечно,
         hardware  их  компьютера  его разрешает. В оконном режиме оконные
         меню, функциональные  ключи,  mouse  позволяют  быстро  выполнять
         большинство  команд. Различные аспекты отладки программ в оконном
         режиме описаны в разделе 3.2.
               Последовательный  режим  хорошо известен многим программис-
         там, знакомым с SYMDEB или DEBUG отладчиками. Этот режим применя-
         ется на IBM-несовместимых компьютерах для отладки программ с вво-
         дом/выводом. Последовательный режим описан в разделе 3.3.
               
                
               3.2. Работа в оконном режиме
                
               На рис.3.1 изображен экран CodeView со всеми открытыми  ок-
         нами.
          
               Рис. 3.1. CodeView экран
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
================================================================================
0) ymx  :  32            ! Add Watch...    !                         ! AX = 6000
1) xmx,c  :              ! Watchpoint...   !                         ! BX = 0005
=========================! Tracepoint...   !=========================! CX = 7530
56:          fd=open ( "2! Delete Watch... !                         ! DX = 0236
57:          lseek( fd,80!-----------------!                         ! SP = A836
58:          read( fd, buffer.mas+1,sizemax );                       ! BP = A836
59:              for ( dinit() ;  ;  )                               ! SI = 00E4
60:        {                                                         ! DI = A942
61:              switch ( getch() )                                  ! DS = 4305
62:           {                                                      ! ES = 4305
63:            /*----------------------------------------------------! SS = 4305
64:      case 0: switch ( getch() )                                  ! CS = 41C2
65:            {                                                     ! IP = 004E
66:              case 71 :--y;chy();                /* вверх-влево */! novrflow
67:              case 75 :--x;chx();                /* влево  */     !    up
=====================================================================!  enable
Microsoft (R) CodeView (TM)  Version 1.00                            ! negative
Copyright (C) Microsoft Corp 1986.  All rights reserved.             ! not zero
                                                                     ! no auxcy
>db buffer.mas L 20                                                  !   even
4305:0230                 00 00 00-00 00 00 00 00 00 00 00       ....! no carry
4305:0240  00 00 00 00 00 00 00 00-00                       .........!
>
          
               Элементы дисплея описаны ниже:

                                      - 22 -
         
         
               1) окно отладки, содержащее отлаживаемую программу. Оно со-
         держит,  например,  исходный "C" текст, или ассемблерный код, или
         любой специфицированный текстовый файл;
               2) текущая строка программы, отмеченная негативом (или дру-
         гим цветом). Она не обязательно  должна  быть  видима,  программу
         можно свободно листать;
               3)  строка, содержащая точку останова и отмеченная повышен-
         ной яркостью;
               4) окно диалога, в которое, в ответ на  CodeView  приглаше-
         ние,  вводятся  диалоговые  команды. При просмотре буфера диалога
         его можно листать верх/вниз;
               5) курсор, находящийся в строке ввода команды. Листая окно,
         можно перемещать его верх/вниз или переместить его из окна диало-
         га в окно программы;
               6) окно регистров, показывающее текущее значение  регистров
         и флагов процессора. Его можно открывать/закрывать;
               7) вертикальная линия, разделяющая окна. Стрелки на ее кон-
         цах используются при листании окон mouse'ом;
               8) сторожевое окно, в котором высвечивается текущее состоя-
         ние переменных или выражений, поставленных на контроль. Оно разд-
         вигается автоматически при создании сторожевых операторов;
               9) строка меню, содержащая заголовки меню и команд; их мож-
         но активизировать спецключами или mouse'ом. Заголовки с восклица-
         тельными знаками -- команды, остальные -- меню;
               10)  меню, открытое через соответствующий заголовок. На ри-
         сунке открыто Watch-меню;
               11) текущая меню-команда, отмеченная голубым цветом или не-
         гативом. Выбор команды осуществляется передвижением подсветки;
               12) mouse-указатель, указывающий текущее положение mouse'а.
         Появляется только тогда, когда в системе инстоллирован mouse;
               13) диалоговое окошко (на рисунке его нет) в  центре  дисп-
         лея.  Предназначено  для  работы с командами меню (например, вво-
         да/удаления сторжевых операторов);
               14) окошко ошибок - для демонстрации ошибок и  предупрежде-
         ний.
                    
               3.2.1. Ввод команд спецключами
               
               CodeView имеет два вида команд: оконные и диалоговые.  Диа-
         логовые  команды  вводятся  в окне диалога, их синтаксис описан в
         главе 4 "Диалоговые команды".
               Многие из CodeView команд доступны через оконный интерфейс.
         Оконные версии команд более просты, их  можно  ввести,  используя
         функциональные ключи, ALT и CTL комбинации или команды-стрелки.
               Большинство  оконных  команд  можно  также ввести с помощью
         mouse'а (это будет описано в разделе 3.1.2.). Ключ-команды описа-
         ны далее. Пересечение ключ-команд и mouse-команд дано в  приложе-
         нии 12.1.3.

                                     
           
               3.2.1.1. Передвижение текста и курсора спецключами
                                     
               
               Следующие ключи передвигают курсор или  листают  вверх/вниз

                                      - 23 -
         
         
         содержимое окна отладки и диалога:
               Ключ                          Функция
               
               F6               Перемещает курсор из окна диалога в
                                окно отладки и назад.

               CTL+U            Перемещает разделитель окон диалога
                                и отладки на строку вверх.

               CTL+D            Перемещает разделитель окон диалога
                                и отладки на строку вниз.
                                
               стрелка          Перемещает курсор на строку вверх в
               вверх            окне диалога или отладки.
                                                                  
               стрелка          Перемещает  курсор на строку вниз в
               вниз             окне диалога или отладки.
               
               PGUP             Листает вверх на одну страницу теку-
                                щее окно (диалога или отладки). Кур-
                                сор при этом сохраняет текущее поло-
                                жение.
                                
               PGDN             Листает вниз  на одну страницу теку-
                                щее окно (диалога или отладки). Кур-
                                сор при этом сохраняет текущее поло-
                                ение.
               
               HOME             Переход в начало текущего окна. Если
                                курсор в окне отладки, то он  перед-
                                вигается на начало исходного текста,
                                если в окне  диалога, то  на  начало
                                протокола  (при  переполнении буфера
                                диалога начало протокола теряется).
                                
               END              Переход в конец  текущего окна. Если
                                курсор в окне отладки, то он  перед-
                                вигается  в  конец исходного текста,
                                если в окне диалога, то на  CodeView
                                приглашение ('>') в конце буфера.
               
               
                                
               3.2.1.2. Изменение экрана спецключами
               
               
                Ключ                        Функция
                
                F1              Инициализация  окна  помощи (help'а)
                                Help-система    детально  описана  в
                                разделе 3.1.4.   Эта  команда  может
                                быть  выполнена   как  Help  команда
                                View меню, см. раздел 3.1.3.3.
                                
                F2              Открывание/закрывание окна регистров.

                                      - 24 -
         
         
                                Эта команда может быть выполнена как
                                Registers  команда  Options меню, см.
                                раздел 3.1.3.6.
                                
                F3              Переключение  между  режимом исходного
                                текста и ассемблера. Эту команду можно
                                выполнить через меню.
                
                F4              Переключение в экран вывода программы.
                                Для возврата в CodeView нажмите любую
                                клавишу.  Эту команду можно выполнить
                                через  меню (см. раздел 3.1.3.3).
               
               
                                
               3.2.1.3. Контроль выполнения программы спецключами
               
               
                Ключ                        Функция
                                
                F5              Выполнить до следующей точки останова
                                или до конца  программы,  если  точек
                                останова нет.  Аналогична  диалоговой
                                команде G без аргумента.
                                
                F7              Выполнить   программу    до   строки,
                                помеченной курсором,  или до конца,
                                если это невозможно.
                                
                F8              Выполнить    команду     трассировки.
                                CodeView  выполняет  текущую  строку
                                исходного  текста  или  ассемблерный
                                инструкцию.  Если это вызов функции,
                                подпрограммы, прерывания, то CodeView
                                проваливается в вызываемую программу.
                                Эта  команда  не  трассирует  MS-DOS
                                функции (прерывание 0x21).
                
                F9              Установ/стирание точки останова в той
                                строке, где находится курсор. Если  в
                                текущей строке есть  точка  останова,
                                то стереть ее, если нет, то поставить;
                                если курсор находится в окне диалога,
                                то  отладчик  выдаст  соответствующее
                                предупреждение.
                
                F10             Выполнить  команду "программный шаг".
                                Аналогична команде трассировки  (F8),
                                но при этом CodeView не "проваливается"
                                в функции, подпрограммы, прерывания.
                                      
               Важно:
               Вы  можете прервать выполнение программы нажатием CTL+C или
         CTL+BREAK. Это полезно, если ваша программа  зациклилась  или  ее
         выполнение  замедляют сторожевые операторы. Стартовые опции, зап-

                                      - 25 -
         
         
         рещающие их применение, описаны в разделе 2.5.8.
                                      
               
               3.2.1.4. Выбор меню-команд спецключами
                
               CodeView имеет семь меню. В этом разделе описано как произ-
         водить выбор меню. Меню-команды описаны в п. 3.1.3.
               Меню-линейка вверху экрана имеет девять  заголовков:  File,
         Search,  View,  Run,  Watch,  Options, Calls, Trase!, Go!. Первые
         семь из них - меню, последние два -- команды. Trase! и Go!  пред-
         назначены  для использования mouse'ом, но их можно активизировать
         нажатием ALT+T (ALT+G) и Enter. Восклицательный знак в  заголовке
         указывает,  что  этот  заголовок -- команда, а не меню. Некоторые
         команды проще выполнить функциональным ключем (F1-10), чем  через
         меню-интерфейс.
               
               Алгоритм выбора команд из меню:
                
               1)  открыть  меню, нажав ALT и первую букву заголовка меню.
         Например, ALT+S открывает Search меню. Заголовок  меню  при  этом
         подсвечивается, само меню открывается под ним;
               2) возможны три пути выбора команды из открытого меню:
               -  с помощью ключей стрелка вниз и стрелка вверх произвести
         выбор команды, перемещая подсветку; нажать Enter;
               - нажать первую букву выбираемой команды и нажать Enter;
               - нажать первую букву выбираемой команды совместно с ALT. В
         этом случае нет необходимости подтверждать команду Enter'ом;
               3) после выбора команды произойдет одно из трех:
               - для большинства команд: команда будет выполнена немедлен-
         но;
               - для команд-опций: будет выдано сообщение, что опция вклю-
         чена/выключена;
               - для команд поиска и контроля: будет продолжен диалог;
               4)  если  диалог  продолжится, то откроется окошко диалога.
         Заполните его и нажмите Enter. Например, окошко  диалога  команды
         Find... запросит регулярное выражение для поиска (см. п. 3.1.3.2.
         использование  Search  меню и приложение 12.2 "Регулярные выраже-
         ния"). Если ответ правилен, команда выполнится, если нет, то поя-
         вится окошко с сообщением об ошибке. Нажмите любой ключ для возв-
         рата.
               В любой точке этого процесса можно нажать  ESC  для  снятия
         команды.  Если  меню  выбрано, можно нажать ключи стрелка влево и
         стрелка вправо для перехода к соседнему меню.
                
               3.2.2. Выбор меню-команд mouse'ом
                
               CodeView отладчик может работать с  MicroSoft  mouse'ом  (и
         некоторыми совместимыми устройствами). Следующие термины употреб-
         ляются в описании путей выбора и выполнения команд mouse'ом:
           
                 Терм                         Определение
                
                Указать          Передвинуть mouse-указатель на выби-
                (Point)          раемый заголовок.
                                 

                                      - 26 -
         
         
                Щелкнуть         Быстро нажать и отпустить mouse кноп-
                (Click)          ку.
                
                Тащить           Производить  перемещение mouse ука-
                (Drag)           зателя  при нажатой кнопке mouse'а.
                
                CodeView использует обе mouse кнопки. Термы "щелкнуть
           левой", "щелкнуть правой", "щелкнуть обеими"  и  "щелкнуть
           любой"  обозначают  соответственно  использование  левой и
           правой кнопки mouse'а.
                
                
               3.2.2.1. Изменение экрана mouse'ом
                
               Вид  CodeView  экрана  можно изменить, "указав" один из его
         элементов, "щелкнув" на нем или "протащив" его:
                
                    Элемент                     Действие
                
                Двойная   линия-     Тащить ее вверх или вниз в зави-
                разделитель окон     симости от того, что вам нужно.
                текста и далога.
                
                Стрелка вниз или     Указать ее и  щелкнуть для пере-
                стрелка  верх на     мещения текста  соответствующего
                вертикальной ли-     окна вверх/вниз.
                нии-разделителе.     Щелчки имеют следующее значение:
                                     левый щелчок --  перемещение  на
                                                      одну строку;
                                     правый щелчок -- перемещение  на
                                                      одну страницу;
                                     щелчек обеими -- перемещение  на
                                                      начало или конец
                                                      текущего окна.

               Некоторые меню-команды также меняют вид экрана. Более  под-
         робно см. раздел 3.2.3, описывающий меню-команды.
                
                                      
           
               3.2.2.2. Контроль выполнения программы mouse'ом
                
               Выполнение программы можно контролировать mouse'ом:
           
                 Элемент                     Действие
                Строка   ис-     Указать ее и щелкнуть. Кнопки mouse'а
                ходного тек-     имеют следующее значение:
                ста или  ас-     "левый  щелчок" -- если на этой стро-
                семблерная             ке нет точки останова, то она
                инструкция.            будет установлена, если есть,
                                       то будет убрана;
                                 "правый  щелчок" --  установить  вре-
                                       менную  точку останова и выпол-
                                       нить  программу до  конца  или
                                       ближайшей точки останова.

                                      - 27 -
         
         
                                 Если выбранная строка не имеет выпол-
                                 няемого  кода (например, объявление
                                 или комментарий), то CodeView выдаст
                                 соответстующее предупреждение.
                                 
                Trace! заголо-  "Указать" и "щелкнуть". Кнопки mouse'а
                вок в строке     имеют следующее значение:
                меню.            "левый  щелчок" -- выполние   команды
                                       трассировки. CodeView выполняет
                                       следующую строку исходного текс-
                                       та или ассемблерную инструкцию.
                                       Если она содержит вызов функции.
                                       подпрограммы,   прерывания,  то
                                       CodeView  "проваливается" в нее
                                       (за исключением прерывания 0x21).
                                 "правый щелчок" -- выполние   команды
                                       "программный шаг". CodeView  вы-
                                       полняет следующую строку исход-
                                       ного  текста  или  ассемблерную
                                       инструкцию.  Если  она содержит
                                       вызов функции,    подпрограммы,
                                       прерывания,   то  CodeView   не
                                       "проваливается" в нее, произво-
                                       дит вызов и возврат.
                                 Эти две команды  отличаются  друг  от
                                 друга вызовом  подпрограмм,  функций,
                                 прерываний.
                                 
                Go! заголовок    "Указать" и "щелкнуть" любой из mouse
                в строке меню.   кнопок.  Команда  выполняет программу
                                 до первой точки останова или до конца,
                                 если точки останова не были встречены.
                                 
                Флаги в окне     "Указать" имя флага и "щелкнуть" любой
                регистров.       кнопкой  mouse'а  для  инвертирования
                                 флага. Имя флага изменится в соответ-
                                 ствии со статусом  и, если вы работа-
                                 ете в цветном режиме,  изменится  его
                                 цвет.
                                 
               Важно:
               Вы можете прервать выполнение программы с помощью CTL+BREAK
         и CTL+C. См подробнее разделы 3.2.1.3 и 2.5.8.
                                      
               
               3.2.2.3. Выбор меню-команд mouse'ом
                
               CodeView отладчик имеет 7 меню. В этом разделе описан алго-
         ритм  выбора  меню-команд  mouse'ом.  Сами меню описаны в разделе
         3.1.3.
               Меню-строка содержит 9 заголовков: File, Search, View, Run,
         Watch, Options, Calls, Trase!, Go!. Первые семь из них  --  меню,
         последние  два -- команды, выполняемые mouse'ом. Алгоритм раскры-
         тия меню и выбора из него команды следующий:
               1) открыть меню, "указав" заголовок меню из строки меню за-

                                      - 28 -
         
         
         головков. Откройте, например, Search меню;
               2) mouse-указателем на заголовке нажмите  любую  из  кнопок
         mouse'а.  Под заголовком появится окошко меню. Например, если был
         выбран Search-заголовок, то под ним появится Search-меню;
               3) не отпуская кнопку mouse'а, перемещая подсветку,  произ-
         ведите  выбор  команды. Выберите, например, команду Find. При пе-
         редвижении указателя mouse'а за границы меню, подсветка исчезает.
         Однако, пока кнопка не отжата, можно вернуть указатель mouse'а  и
         произвести выбор;
               4)  если команда выбрана, отпустите mouse-кнопку (например,
         на команде Find). Возможны следующие три продолжения:
               - для большинства команд: команда будет выполнена немедлен-
         но;
               - для команд опций: будет выдано сообщение, что опция вклю-
         чена/выключена;
               - для команд поиска и контроля: будет продолжен диалог;
               5) если диалог будет продолжен, то откроется окошко  диало-
         га.  Заполните  его и нажмите Enter. Например, появившееся окошко
         диалога команды Find... запросит регулярное выражение поиска (см.
         3.1.3.2. "Использование Search меню" и приложение 12.2  "Регуляр-
         ные выражения").
               Если  ответ правилен, команда выполнится, если нет, то поя-
         вится окошко с сообщением об ошибке. Для возврата в  процесс  от-
         ладки нажмите любой ключ или кнопку mouse'а.
               Для  выхода  из меню уведите курсор mouse'а в сторону и от-
         пустите его кнопку. Для перехода в другое меню переведите  курсор
         mouse'а на другой заголовок.
         
               
               3.2.3. Применение меню-команд
                
               В  этом разделе описаны команды из меню. Они могут быть вы-
         полнены спецключами (см. раздел 3.2.1.) или mouse'ом (см.  раздел
         3.2.2.).
               
               
               3.2.3.1. Применение File-меню-команд
               
               
               File-меню  состоит из команд для работы с файлами исходного
         текста программы. File-меню показано на рис.3.2. и описано ниже:
           
                               Рис. 3.2. File-меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
==============================! chfs.c !========================================
! Load... !32                                                        ! AX = 6000
! Shell   !                                                          ! BX = 0005
! Quit    !==========================================================! CX = 7530
!---------!  fd=open ( "24-32.fon",0x8000);                            DX = 0236
                
                
                Команда                       Действие
                
                Load...               Загрузка  в окно отладки нового
                                  текстового файла. При  вызове  этой
                                  команды  диалоговое окошко запросит

                                      - 29 -
         
         
                                  имя загружаемого файла. Файл должен
                                  быть  текстовым,  т.е.  первые  128
                                  байт    не     должны     содержать
                                  графических   символов   и  русских
                                  букв. Он будет высвечиваться в окне
                                  отладки    вместо   текущего   (при
                                  переключении  в   режим   исходного
                                  текста).  После просмотра файла нет
                                  необходимости    загружать     пер-
                                  воначальный файл, он загрузится при
                                  выполнении любой из  команд.  Точки
                                  останова при этом сохраняются.
                                      Нет  необходимости  в  загрузке
                                  нового    файла    для    просмотра
                                  исходного  текста  другого  модуля.
                                  CodeView автоматически  переключает
                                  текст  при  входе в соответствующий
                                  модуль.   Команда загрузки исходных
                                  файлов  не является необходимой, но
                                  она    может    понадобиться    при
                                  установке  точек останова в строках
                                  различных модулей.
               
               Примечание:
               Если CodeView не найдет исходный файл при входе в какой-ли-
         бо модуль, то он запросит через диалоговое окно его имя  и  path.
         Введите  их,  если  файл находится в другом каталоге, или нажмите
         Enter, если файла нет. В этом случае этот модуль  сможет  отлажи-
         ваться только в режиме ассемблера.
                
                Shell                 Временный  выход  в систему для
                                  выполнения MS-DOS'овских команд или
                                  программ.   Команда  MS-DOS'а  Exit
                                  возвращает в отладчик.
                                      Shell-команда сохраняет текущий
                                  процесс в памяти и загружает второй
                                  командный  процессор   Command.Com.
                                  Это  требует  много  памяти  (более
                                  200К)  под  отладчик,  Command.Com,
                                  символьные  таблицы  и отлаживаемую
                                  программу. Если памяти не  хватает,
                                  появится   сообщение   об   ошибке.
                                  Shell-команда  не  будет   работать
                                  правильно,  если  не была выполнена
                                  инициализирующая  часть  программы.
                                  Для   выполнения   "C"старт   кодов
                                  необходимо   после    старта    или
                                  рестарта     CodeView     выполнить
                                  программу до любой точки, например,
                                  набрав команду Gmain.
                
                Quit                  Возврат в MS-DOS.
               
               
                

                                      - 30 -
         
         
               3.2.3.2. Применение Search меню-команд
                
               Search-меню содержит команды поиска строк в текстовом файле
         и меток выполняемого кода. Search меню показано ниже на рис.3.3.
                
                              Рис. 3.3. Search-меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
==============================! chfs.c !========================================
0) ymx! Find...  !                                                   ! AX = 6000
1) xmx! Next     !                                                   ! BX = 0005
======! Previous !===================================================! CX = 7530
56:   ! Label... !en ( "24-32.fon",0x8000);                          ! DX = 0236
57:   !==========!( fd,80L,0);                                       ! SP = A836
58:          read( fd, buffer.mas+1,sizemax );                       ! BP = A836
                
                
                Команда                    Действие
                                      
                Find...               Поиск  строк  в  текущем  файле
                                  исходного текста. После вызова этой
                                  команды, диалоговое окошко запросит
                                  выражение   для   поиска.   Введите
                                  регулярное               выражение,
                                  специфицирующее  искомую  строку  и
                                  нажмите   Enter.   CodeView   будет
                                  искать  ее  с  текущей позиции и до
                                  конца  файла.  Если  оно   найдено,
                                  курсор    переместится   в   первую
                                  строку, содержащую  это  выражение,
                                  если  нет,  то  появится  окошко  с
                                  сообщением об ошибке.
                                      При   работе   в   ассемблерном
                                  режиме,   по   нахождению   искомой
                                  строки    CodeView    автоматически
                                  переключится   в   режим  исходного
                                  текста.
                                      Регулярные  выражения  -- метод
                                  спецификации  переменной  текстовой
                                  строки.  Этот  метод заимствован из
                                  Xenix'а и Unix'а и похож  на  метод
                                  использования   групповых   имен  в
                                  MS-DOS'е.   Регулярные    выражения
                                  описаны в приложении 12.2.
                
                Next                  Поиск   следющей   строки    по
                                  текущему   регулярному   выражению,
                                  введеному   командой   Find...    .
                                  CodeView автоматически переходит на
                                  начало файла,  если  это  реглярное
                                  выражение отсутствует между текущей
                                  точкой и концом файла.  Если  этого
                                  выражения   нет   в  текущем  файле
                                  (например,       после        ввода
                                  Find-выражения  был загружен другой

                                      - 31 -
         
         
                                  файл), CodeView выдаст сообщение об
                                  ошибке окошке сообщений.
                
                Previous              Поиск   предыдущей   строки  по
                                  текущему   регулярному   выражению,
                                  введеному    командой   Find...   .
                                  CodeView автоматически переходит на
                                  конец  файла,  если  это регулярное
                                  выражение отсутствует между текущей
                                  точкой  и началом файла. Если этого
                                  выражения  нет  в   текущем   файле
                                  (например,        после       ввода
                                  Find-выражения был загружен  другой
                                  файл), CodeView выдаст сообщение об
                                  ошибке в окошке сообщений.
                                   
                Label...              Поиск метки в выполняемом коде.
                                  Метка должна  быть  именем  функции
                                  или  ассемблерной меткой (например,
                                  __astart из "C"-библиотеки  времени
                                  исполнения).  По  нахождении  метки
                                  CodeView      переключается       в
                                  ассемблерный   режим.   Если  метка
                                  отсутствует,    появится     окошко
                                  сообщений с сообщением об ошибке.


               3.2.3.3. Применение View меню-команд
                
               View  меню содержит команды переключения между ассемблерным
         режимом и режимом исходного текста, переключения в  экран  вывода
         программы, экран помощи. Некоторые из этих команд  продублированы
         функциональными ключами (см. рис. 3.4.).

                                      
               
                               Рис. 3.4. View  меню
               
           
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
================================!hfs.c !=============================!==========
0) ymx  :  32 ! Help         F1 !                                    ! AX = 6000
1) xmx,c  :   ! Source       F3 !                                    ! BX = 0005
==============! Assembly     F3 !====================================! CX = 7530
56:          f! Output       F4 !",0x8000);                          ! DX = 0236
57:          l! Evaluate...     !                                    ! SP = A836
58:          r!-----------------!+1,sizemax );                       ! BP = A836

                
                Команда                       Действие
                
                Help                  Открыть меню помощи (см. раздел
                                  3.1.4.)
                                      
                Source                Переключение  из  ассемблерного

                                      - 32 -
         
         
                                  режима в  режим  исходного  текста.
                                  Если  исходный  текст  отсутствует,
                                  команда игнорируется.
                                      
                Assembly              Переключение     из      режима
                                  исходного     текста     в    режим
                                  ассемблера. Если  вы  находитесь  в
                                  режиме      ассемблера,     команда
                                  игнорируется.
                                      
                Output                Переключение с CodeView  экрана
                                  в  экран  вывода.  Если CodeView не
                                  сможет перейти в экран вывода,  или
                                  если    экран    "запортится",   то
                                  CodeView должен быть  перевызван  с
                                  опцией /S (см. раздел 2.3.3.).
                                      
               Evaluate...            Вычисление  "C"выражений. После
                                  выбора  этой  команды   открывшееся
                                  окошко  диалога  запросит выражение
                                  для       вычисления.       Введите
                                  "C"выражение,    распознаваемое   и
                                  вычисляемое CodeView (см.  главу  4
                                  "Диалоговые   команды").   Значение
                                  выражения  появится  в   диалоговом
                                  окне. Команда аналогична диалоговой
                                  команде   "Вычислить    выражение".
                                  Можно   специфицировать  формат,  в
                                  котором     будет     высвечиваться
                                  выражение.     Тип     спецификации
                                  следуюций: <,>. Если
                                  формат    не    указан,    значение
                                  выражения  высветиться  в   формате
                                  умолчания  (см.  главу  6 "Просмотр
                                  данных и выражений" или  приложение
                                  12.1  "Краткое  описание  команд  и
                                  режимов").
               
                        3.2.3.4. Применение Run меню-команд
               
               
               Run  меню содержит команды выполнения программы. Меню пока-
         занно на рис.3.5. и его команды описаны ниже:
                

                               Рис. 3.5.  Run меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
================================================================================
0) ymx  :  32       ! Start             !                            ! AX = 6000
1) xmx,c  :         ! Restart           !                            ! BX = 0005
====================! Execute           !============================! CX = 7530
56:          fd=open! Clear Breakpoints !);                          ! DX = 0236
57:          lseek( !-------------------!                            ! SP = A836
58:          read( fd, buffer.mas+1,sizemax );                       ! BP = A836

                                      - 33 -
         
         
                
                
                Команда                   Действие
                
                Start                 Переход  на  начало программы и
                                  ее выполнение. Установленные  ранее
                                  точки    останова    и   сторожевые
                                  операторы   сохраняются.   CodeView
                                  будет  вполнять программу до первой
                                  точки останова или конца программы,
                                  если  точки останова не встретятся.
                                  Аналогична       последовательности
                                  команд Restart (см. ниже) и Go.
                                      
                Restart               Рестарт текущей програмы без ее
                                  выполнения.   После  ее  выполнения
                                  можно   отлаживать   программу    с
                                  начала. Точки останова и сторожевые
                                  записи при этом сохраняются.
                                      
                Execute               Медленное выполнение с текущего
                                  оператора.  Эквивалентна диалоговой
                                  команде E. Выполнение  прекращается
                                  при нажатии любого ключа или кнопки
                                  mouse'а.
                                      
                Clear                 Отмена  всех  точек   останова.
                 Breakpoints      Может  понадобиться  после  команды
                                  Restart,    если   вы   не   хотите
                                  пользоваться  установленными  ранее
                                  точками останова. Сторожевые записи
                                  при этом сохраняются.
               
               
                                  
               3.2.3.5. Применение Watch-меню-команд
                      
               Watch меню содержит команды  управления  сторожевым  окном.
         Эти команды имеют аналоги среди диалоговых команд. Watch меню по-
         казано на рис. 3.6 и описано ниже:
           
           
               Рис. 3.6.  Watch  меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
================================================================================
0) ymx  :  32            ! Add Watch...    !                         ! AX = 6000
1) xmx,c  :              ! Watchpoint...   !                         ! BX = 0005
=========================! Tracepoint...   !=========================! CX = 7530
56:          fd=open ( "2! Delete Watch... !                         ! DX = 0236
57:          lseek( fd,80!-----------------!                         ! SP = A836
58:          read( fd, buffer.mas+1,sizemax );                       ! BP = A836
                
                
                Команда                       Действие
                

                                      - 34 -
         
         
                Add Watch             Добавление сторожевых выражений
                                  в  сторожевое  окно.  Открывающееся
                                  диалоговое      окошко     запросит
                                  "C"выражение, значение которого  вы
                                  хотите  просматривать в watch окне.
                                  Введите его и  нажмите  Enter,  или
                                  кнопку  mouse'а. Выражение появится
                                  в сторожевом  окне  в  виде  текста
                                  нормальной яркости. Оконной версией
                                  команды   нельзя    специфицировать
                                  высвечивание отрезка памяти.
                                      Можно специфицировать формат, в
                                  котором     будет     высвечиваться
                                  выражение.     Тип     спецификации
                                  следуюций: <,> printf-формат.  Если
                                  формат   не   указан,  то  значение
                                  выражения высвечивается  в  формате
                                  умолчания  (см.  главу  6 "Просмотр
                                  данных и выражений" или  приложение
                                  12.1  "Краткое  описание  команд  и
                                  режимов").
           
                Watchpoint...         Добавляет сторожевое условие  в
                                  сторожевое    окно.   Открывающееся
                                  диалоговое     окно     запрашивает
                                  "C"выражение,   значение   которого
                                  должно  контролироваться.   Введите
                                  его  и  нажмите  Enter,  или кнопку
                                  mouse'а.   Выражение   появится   в
                                  сторожевом   окне   в  виде  текста
                                  повышеной   яркости.
                                      Watchpoint... оператор прерыва-
                                  ет  процесс  выполнения  программы,
                                  если     значение     Watchpoint...
                                  выражения не равно 0  (т.е.  true).
                                  Более   подробно   см.  раздел  8.3
                                  Команда  "Установить  выражение  на
                                  контроль".
                                      
                Trasepoint...         Добавляет оператор "контроля по
                                  изменению  выражения"  в сторожевое
                                  окно. Открывающееся диалоговое окно
                                  запрашивает     "C"выражение    или
                                  отрезок памяти,  значение  которого
                                  должно   контролироваться.  Введите
                                  его и  нажмите  Enter,  или  кнопку
                                  mouse'а.   Выражение   появится   в
                                  сторожевом  окне  в   виде   текста
                                  повышеной яркости.
                                      Trasepoint...          оператор
                                  прерывает    процесс     выполнения
                                  программы   по  изменению  значения
                                  Trasepoint... выражения или отрезка
                                  памяти.  Более  подробно см. раздел
                                  8.4 Команда  "Установить  выражение

                                      - 35 -
         
         
                                  на контроль по изменению".
                                      Оконной  версией команды нельзя
                                  специфицировать высвечивание отрез-
                                  ка памяти.
                                      Можно специфицировать формат, в
                                  котором     будет     высвечиваться
                                  выражение.     Тип     спецификации
                                  следуюций: <,> printf-формат.  Если
                                  формат   не   указан,  то  значение
                                  выражения высвечивается  в  формате
                                  умолчания  (см.  главу  6 "Просмотр
                                  данных и выражений" или  приложение
                                  12.1  "Краткое  описание  команд  и
                                  режимов").
                                      
                Delete Watch...       Удаление  сторожевых операторов
                                  из  сторожевого  окна.  Открывшееся
                                  диалоговое    окшко   демонстрирует
                                  текущие    сторожевые    операторы.
                                  Произведите  выбор удаляемой записи
                                  mouse'ом или спецключами и  нажмите
                                  Enter или любую кнопку mouse'а.
                                                        
               
               
               3.2.3.6. Применение Option-меню
                
               Меню  опций  содержит команды установки опций, определяющих
         поведение CodeView отладчика. Option меню показано на рис. 3.7  и
         его команды описаны ниже.
                

           
                              Рис. 3.7. Option-меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
================================================================================
0) ymx  :  32                   !  Flip/Swap     !                   ! AX = 6000
1) xmx,c  :                     !  Mix Source    !                   ! BX = 0005
================================!  Symbols       !===================! CX = 7530
56:          fd=open ( "24-32.fo!  Bytes Coded   !                   ! DX = 0236
57:          lseek( fd,80L,0);  !  Registers   F2!                   ! SP = A836
58:          read( fd, buffer.ma!  Case Sense    !                   ! BP = A836
59:              for ( dinit() ;!----------------!                   ! SI = 00E4
60:        {                                                         ! DI = A942
                
                
               Три из них специфицируют вид ассемблерного текста, выдавае-
         мого  CodeView. По умолчанию CodeView высвечивает исходный текст,
         прокоментированный ассемблерными командами; байты эхо-команд ука-
         зываются в символьной мнемонике  так же как и метки. Пример:
                27:          name = gets ( namebuf ) ;
                32AF:003E    8D46DE     LEA       AX,Word Ptr[namebuf]
                32AF:0041    50         PUSH      AX
                32AF:0042    E89C09     CALL      _gets(03E1)

                                      - 36 -
         
         
                32AF:0045    83C402     ADD       SP,02
                32AF:0048    8946DA     MOV       Word Ptr[name],AX
                
               Если опция включена, то в меню слева от нее находится двой-
         ная стрелка "п". Статус опции инвертируется при каждом выборе. По
         умолчанию все опции кроме Registers включены.
                
                Команда                       Действие
                
                Flip/Swap             Когда  опция включена (например
                                  по умолчанию), CodeView  производит
                                  вывод     вывода     программы    в
                                  свопинговый/флипинговый       экран
                                  вывода;   выключение  опции  делает
                                  процесс  отладки   более   гладким,
                                  переключая  вывод  программы в окно
                                  диалога.
                                      Если    свопинг/флипинг     был
                                  специфицирован  явным указанием S-F
                                  стартовых опций,  выключение  опции
                                  вообще отменяет вывод.
                                      Данные    замечания    касаются
                                  ввода/вывода,  производимого  через
                                  MS-DOS.
                                  
               Предупреждение:
               Если опция включена, программа пишет в экран  вывода,  если
         выключена, то в диалоговое окно. Включение/выключение опции может
         нарушить вывод программы.

                                    
           
           
                Mix Source            Когда   опция   включена    (по
                                  умолчанию), CodeView  демонстрирует
                                  ассемблерный код вместе со строками
                                  исходного   текста.  Действие  этой
                                  опции ощутимо только в ассемблерном
                                  режиме.
                                      Вот  как  будет   высвечиваться
                                  пример    из   начала   главы   при
                                  отключенной опции:
                32AF:003E    8D46DE     LEA       AX,Word Ptr[namebuf]
                32AF:0041    50         PUSH      AX
                32AF:0042    E89C09     CALL      _gets(03E1)
                32AF:0045    83C402     ADD       SP,02
                32AF:0048    8946DA     MOV       Word Ptr[name],AX
                                      
                Symbols               Когда    опция   включена   (по
                                  умолчанию),  CodeView   высвечивает
                                  ассемблерный  код  с символическими
                                  именами  исходного   текста,   если
                                  нет, то CodeView высвечивает адреса
                                  или ссылки  на  регистры.  Действие
                                  этой   опции   ощутимо   только   в

                                      - 37 -
         
         
                                  ассемблерном режиме.
                                      Вот  как  будет   высвечиваться
                                  пример    из   начала   главы   при
                                  отключенной опции:
                27:          name = gets ( namebuf ) ;
                32AF:003E    8D46DE     LEA       AX,Word Ptr[BP-22]
                32AF:0041    50         PUSH      AX
                32AF:0042    E89C09     CALL      03E1
                32AF:0045    83C402     ADD       SP,02
                32AF:0048    8946DA     MOV       Word Ptr[BP-26],AX

                Bytes Coded           Когда   опция   включена    (по
                                  умолчанию), CodeView  демонстрирует
                                  значения   байтов,  соответствующих
                                  ассемблерному коду.  Действие  этой
                                  опции ощутимо только в ассемблерном
                                  режиме.
                                      Вот  как  будет   высвечиваться
                                  пример    из   начала   главы   при
                                  отключенной опции:
                27:          name = gets ( namebuf ) ;
                32AF:003E    LEA       AX,Word Ptr[namebuf]
                32AF:0041    PUSH      AX
                32AF:0042    CALL      _gets(03E1)
                32AF:0045    ADD       SP,02
                32AF:0048    MOV       Word Ptr[name],AX

                Registers             Когда   опция   выключена   (по
                                  умолчанию), окно регистров  закрыто,
                                  когда  включена  --  открыто. Опция
                                  аналогична функциональному ключу F2.

           
                Case Sense            Когда    опция   включена   (по
                                  умолчанию),   CodeView     отладчик
                                  чувствителен   к  большим  и  малым
                                  буквам в символьных  именах,  когда
                                  выключена,   то   нет.  "C"  обычно
                                  чувствителен   к  большим  и  малым
                                  буквам,    но  данная  опция  может
                                  понадобиться      при       отладке
                                  ассемблерных программ.
                                               
               
               3.2.3.7. Применение Calls-меню
                           
               Calls-меню  отличается от других меню тем, что его содержа-
         ние и размер изменяются в зависимости от  состояния  отлаживаеиой
         программы. Calls-меню показано на рис.3.8.


                                      - 38 -
               
               
               
                               Рис. 3.8.  Calls-меню
               
Ё File  Search  View  Run  Watch  Options  Calls  Trace!  Go!          chfs.exe
=========================================! chfs.c    !==========================
0) ymx  :  32                            ! InitScr() !               ! AX = 0000
                                         !           !
                                         !           !
1) xmx,c  :                              ! dinit()   !               ! BX = A832
=========================================! main()    !===============! CX = 08E7
369:      w.ax = n & 7;                  !ДДДДДДДДДДД!                 DX = 0236
370:      int86x( 0x10, &w, &w1, &s );                               ! SP = A830
                
                
               В  отличие от других меню, открываемых ALT ключами, меню не
         позволяет производить выбор своих директив указанием  ALT+<первая
         буква директивы>. Выбор производится ключами стрелка вниз, стрел-
         ка вверх с последующим Enter или нажатием любой кнопки mouse'а.
               Calls меню содержит имя текущей функции и имена функций, ее
         вызвавших.  Список функций распечатывается в порядке, обратном их
         вызову. Текущая функция -- вверху, самая нижняя  --  main()  (для
         "C"программ).
               Текущие значения аргументов высвечиваются в скобках за име-
         нем  функции. Аргументы высвечиваются в текущем радиксе (по умол-
         чанию в десятичном). Если список функций длинен или список  аргу-
         ментов  велик,  то  может  случиться  так, что они не вместятся в
         Calls окно. В этом случае просматривайте стек вызовов  диалоговой
         версией команды (K).
               Для просмотра текста (кода) одной из активных функций, ука-
         жите  ее заголовок mouse'ом или спецключами. Для возврата в теку-
         щую функцию "укажите" самый верхний заголовок Calls меню.
               
               
               3.2.4. Help-система
           
               Для обеспечения быстрого  доступа  к  необходимой  справке,
         help-система CodeView имеет древовидную структуру.
               Файл help'а называется CV.HLP. Он должен находиться в теку-
         щем  каталоге или каталоге, доступном по PATH'у. Если при запросе
         help-файл не будет найден, CodeView выдаст сообщение об ошибке.
                Когда  вы  вызовете  help,  нажав  ключ  F1  или  "выбрав"
         Help-команду  из  View  меню,  появится  меню   верхнего  уровня.
         Выберите  интересующий вас заголовок, нажав яркую букву его имени
         или указав его mouse'ом.
               Примечание.
               Для получения компактной справки диалоговых команд  исполь-
         зуйте  диалоговую версию help-команды (H). Этот help содержит ко-
         манды, доступные в последовательном режиме, и совершенно  отличен
         от оконной help-системы.
               
               После  выбора  интересующего заголовка, соответствующее ему
         подменю появится немедленно; в некоторых случаях это подменю  бу-
         дет состоять из нескольких экранов.
               В дополнение к меню-заголовкам можно применять четыре спец-
         команды, вызывая их либо нажатием соответствующих им ключей, либо
         "указанием" mouse'ом соответствующей записи в верхней строке. Вот
         эти команды:
                                      

                                      - 39 -
         
         
                PGUP                  Возврат  в   предыдущий  экран,
                                      если это возможно, или меню.
                                      
                PGDN                  Переход  в    следующий  экран,
                                      если это возможно, или меню.
                                   
                HOME                  Возврат  в  корневое  меню.
                
                END                   Возврат  в  экран отладки.


               3.3. Работа в последовательном режиме
             
               Последовательный режим CodeView включает на IBM-несовмести-
         мых компьютерах. В этом режиме он работает так же, как и предыду-
         щие MicroSoft-отладчики SYMDEB и DEBUG.
               В  последовательном  режиме  CodeView ввод/вывод последова-
         тельно заполняет экран, сдвигающийся при переполнении вверх.  При
         этом для возврата и посмотра предыдущего вывода необходимо повто-
         рять интересующую вас команду.
               Большинство  оконных команд не выполнимы в последовательном
         режиме. Однако следующие  функциональные  ключи,  используемые  в
         оконном режиме, доступны в последовательном:
                F1                    Вывод   командно-синтаксической
                                  справки.   Эквивалентен  диалоговой
                                  команде H и отличен от F1  оконного
                                  режима.
                                                             
                F2                    Показ   регистров.  Экивалентен
                                  диалоговой команде R и  отличен  от
                                  F2 оконного режима.

           
                F3                    Переключение   между   режимами
                                  исходного текста и ассемблера. Если
                                  текущий режим  --  режим  исходного
                                  текста,  то  в ассемблерный режим с
                                  последовательным            выводом
                                  ассемблерных    инструкций.    Если
                                  текущий  режим  --  ассемблера,  то
                                  переключение   в   режим  исходного
                                  текста.   Эквивалентен   диалоговым
                                  командам      установки      режима
                                  ассемблера (S-) и исходного  текста
                                  (S+).
                                      
                F4                    Переключение в экран вывода,  в
                                  который     выводит     отлажиаемая
                                  программа.  Нажмите  любую  клавишу
                                  для     возврата.      Эквивалентен
                                  диалоговой команде \.
                                      
                F5                    Выполнить  программу  с текущей
                                  инструкции до конца или  до  первой
                                  точки     останова.    Эквивалентен

                                      - 40 -
         
                
                
                                  диалоговой команде G без параметров.
                                      
                F8                    Выполнить  следующий   оператор
                                  (ассемблера  или исходного текста).
                                  Если в нем содержится вызов функции
         
                                  (подпрограммы,   прерывания  (кроме
                                  0x21)), то отладчик проваливается в
                                  нее.

                F9                    Установить  или  стереть  точку
                                  останова   в    текущей    позиции.
                                  Эквивалентен  диалоговой команде BP
                                  без аргументов.

                F10                   Выполнить  следующий   оператор
                                  (ассемблера  или исходного текста).
                                  Аналогична    команде   трассировки
                                  (F8), но при ее выполнении отладчик
                                  не    проваливается    в    функцию
                                  (подпрограмму,   прерывание).
.


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