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



 

Часть 24

                Параметр Accumulation (Накопление)
ментов и вручную включать сбор статистических данных после начала
выполнения программы.

     Для того,  чтобы  собирать данные для какого-то подмножества
выделенных фрагментов, необходимо сделать следующее:

1.В локальном меню  окна  "Areas"  ("Области")  выберите  команду
  Options (Параметры) для того,  чтобы открыть блок диалога "Area
  Options" ("Параметры "области").

2.Для тех фрагментов,  статистика по которым представляет интерес,
  измените установленное  для маркеров фрагментов значение Normal
  (Нормальный) на значение Enable (Разрешить) (для разре -  шения
  сбора статистических данных) или на значение Disable (Отменить)
  (для отмены сбора статистических данных).

3.Установите параметру Statistics|Accumulation (Статистика| Накоп-
  ление) значение Disabled (Отменить).

4.Начните выполнение программы.  Профилировщик не начнет собирать
  статистические данные до тех пор, пока не встретит маркер фраг-
  мента, имеющий значение Enable (Разрешить).

     Для того, чтобы иметь возможность включать вручную сбор ста-
тистических данных после начала выполнения программы,  необходимо
сделать следующее:

1. Установить маркеры фрагментов.

2. Установить параметру Statistics|Accumulation ( Статистика| На-
   копление) значение Disabled (Отменить).

3. Запустите программу из профилировщика (нажав для этого клавишу
   {F9}).

4. Когда  выполнение  программы  дойдет  до  интересующего места,
   прервите ее выполнение.

5. Включите сбор статистических данных по профилированию (устано-
   вив для этого параметру Statistics|Accumulation ("Статистика|
   Накопление) значение Enabled (Разрешить)).

6. Возобновите выполнение программы (вновь нажав клавишу {F9}).

     Система Turbo Profiler тут  же  начнет  сбор  статистических
данных для выделенных фрагментов.

                Отмена сбора статистических данных

     Иногда, если  какая-то  подпрограмма  или семейство подпрог-
рамм, вызываются из множества различных участков программы, могут
заинтересовать только следующие сведения:

     * Время, затраченное на выполнение подпрограммы

     * В какой момент данная подпрограмма вызывается из  конкрет-
       ного фрагмента программы

     * Время,   затраченное   на  выполнение  подпрограммы  после
       некоего события.

     Для того,  чтобы собирать данные только о конкретных вызовах
подпрограммы,  вызовите  команду  Statistics|Accumulatiion  (Ста-
тистика|Накопление),  чтобы  отключить сбор статистических данных
при запуске программы.  Перед самым вызовом подпрограммы, для ко-
торой необходимо собрать статистику, следует пометить фрагмент, в
котором разрешается режим сбора статистических данных (установите
маркеру фрагмента значение Enable (Разрешить)). После возврата из
подпрограммы следует пометить еще один фрагмент, в котором запре-
щается  сбор статистических данных.  В том случае если необходимо
начать сбор статистических данных после совершения некоего  конк-
ретного события, то можно пометить фрагменты, разрешающие и отме-
няющие сбор статистических данных в участках  программы,  которые
не относятся друг к другу.

     Пример#1: Сбор статистических данных только для определенно-
               го вызова подпрограммы.

     Предположим, что вызовы подпрограммы "аbс" интересуют только
в том случае,  когда она вызывается из подпрограммы "xyz",  а все
остальные ее вызовы совершенно безразличны.

       =>     main()      /* обыкновенный маркер фрагмента */
                          /* в подпрограмме                */
              {
                 :
                 abc();   /* для данного вызова подпрограммы  */
                          /* статистику собирать не требуется */
                 :
                 xyz();
              }
       =>     xyz()      /* обыкновенный маркер фрагмента */
                         /* в подпрограмме                */
              {
                 :
       e>        abc();  /* Необходимо получить статистические */
                         /* данные об этом операторе вызова   */
       d>        :
              }
       =>     abc()      /* обыкновенный маркер фрагмента */
                         /* в подпрограмме                */
              {
                 :
              }

     Обратите внимание на маркер "e>", разрешающий сбор статисти-
ки, и на маркер "d>", отменяющий его. Необходимо установить пара-
метру  Statistics|Accumulation  (Статистика|Накопление)  значение
Disabled (Отменить) перед запуском программы,  в противном случае
профилировщик ошибочно начнет собирать статистические данные  при
первом же вызове подпрограммы "аbс" из "main".

     Пример#2: Сбор статистических данных только после совершения
               некоего события.

     Предположим, что поведение подпрограммы "xyz" меняется в за-
висимости от некоторой информации глобального уровня, контролиру-
емой двумя подпрограммами "bufferon" и "bufferoff".  Время работы
подпрограммы "xyz" интересует только в те моменты, когда значение
переменной "bufferflag" равно 1.

       =>     main()        /* обыкновенный маркер фрагмента */
                            /* в подпрограмме                */
              {
                 :
                 xyz();     /* для данного вызова подпрограммы */
                            /* статистика собираться не будет  */
                 :
                 bufferon();
                 :
                 xyz();     /* будет собираться статистика   */
                            /* для вызова этой подпрограммы  */
                 :
       =>        bufferoff();/* обыкновенный маркер фрагмента */
                             /* в подпрограмме                */
                 :
                 xyz();      /* для данного вызова подпрограммы*/
                             /* статистика собираться не будет */
              }
       =>     bufferon();    /* обыкновенный маркер фрагмента */
                             /* в подпрограмме                */
              {
                 :
                 bufferflag=1;
       e>     }
       d>     bufferoff();    /* обыкновенный маркер фрагмента */
                              /* в подпрограмме                */

              {
                 :
                 bufferflag=0;
              }
       =>     xyz()          /* обыкновенный маркер фрагмента*/
                             /* в подпрограмме                */
              {
                 :
              }

     Обратите внимание  на то,  что маркер "e>",  включающий сбор
статических данных, и маркер "d>", отключающий его, расположены в
тексте программы совсем не там, где происходит вызов подпрограммы
"xyz".  Еще раз напомним,  что Вы должны отключить сбор статисти-
ческих  данных в начале работы программы (установив для этого па-
раметру "Statistics|Accumulation" ("Статистика| Накопление") зна-
чение  Disabled  (Отменить)),  в противном случае данные о первом
вызове подпрограммы "xyz" будут ошибочно присоединены к  собирае-
мой статистике.

                 Команда Delete All (Удалить все)

     Команда Statistics|Delete  All (Статистика|Удалить все) уда-
ляет все статистические данные,  собранные  в  процессе  текущего
сеанса профилирования,  предоставляя возможность начать сбор этих
данных заново.  Команда Delete All (Удалить все) удаляет все дан-
ные,  собранные в ходе сеанса профилирования и находящиеся в отк-
рытых окнах отчета - "Execution Profile" ("Профиль  выполнения"),
"Callers"  ("Вызывающие  подпрограммы"),  "Interrupts" ("Прерыва-
ния"), "Files" ("Файлы") и "Overlays" ("Оверлеи"), - однако уста-
новленные значения  параметров профилирования в результате выпол-
нения этой команды не удаляются.

                     Команда Save (Сохранить)

     При помощи  команды  Statistics|Save  (Статистика|Сохранить)
сохраняются следующие данные, установленные значения и параметры:

* Вся статистика, сбор которой был разрешен во время получения те-
  кущего  профиля (значения времени выполнения и количества вызо-
  вов,  сведения о вызывающих подпрограммах,  данные о  работе  с
  файлами, о прерываниях и оверлеях);

* Вся информация о фрагментах (имена фрагментов,  виды  работы  с
  фрагментами, вызывающие подпрограммы, раздельный или объединен-
  ный режим подсчета времени),  отображаемая  в  окне  "Execution
  Profile" ("Профиль выполнения").

     Если статистика сохранена в файле, то в любой момент ее мож-
но  восстановить при помощи команды Statistics|Restore (Статисти-
ка|Восстановить).

     При выборе команды Statistics|Save (Статистика|Сохранить) на
экране появляется блок диалога, показанное на рис. 2.36 (см. ори-
гинальное руководство).

     Рис. 2.36. Блок диалога "Save" ("Сохранить")

     При этом в блоке ввода "Name" ("Имя") появляется имя файла с
расширением .TFS,  задаваемое по умолчанию (это имя  файла  имеет
вид  "имя_программы.TFS",  где  "имя_программы" - это имя текущей
программы).

                        Сохранение файлов

     Для того,  чтобы сохранить текущую статистику профилирования
в файле с именем, задаваемым по умолчанию, необходимо просто выб-
рать ОК (Выполнить).

     В том случае,  если необходимо сохранить  эту  статистику  в
файле с каким-нибудь другим именем, выполните следующие действия:

     1. Активизируйте  блок ввода "File|Name" ("Файл|Имя").

     2. Введите  требуемое  имя файла (которое в случае необходи-
        мости может включать в себя путь доступа).

     3. Выберите ОК (Выполнить) или нажмите клавишу {Enter}.

     Если файл с таким именем и расширением .TFS уже  существует,
то  будет  выдан запрос на подтверждение необходимости перезаписи
старого файла.

                  Команда Restore (Восстановить)

     При выборе команды Statistics|Restore (Статистика| Восстано-
вить)  на  экране  появляется  блок  диалога  "Enter File Name to
Restore" ("Введите имя файла для восстановления"):

          Рис. 2.37. Блок диалога "Restore" ("Восстановить")
                     (см. оригинальное руководство)

     Блок диалога  "Restore"  ("Восстановить") работает точно так
же, как и другие блоки диалога в профилировщике,  предназначенные
для загрузки файлов. В этом блоке диалога имеется возможность:

* Ввести имя файла или его спецификацию  (содержащую  метасимволы
  DOS) в блок ввода "File Name" ("Имя файла");

* Выбрать другой дисковод или директорию на дереве директорий

* Выбрать имя файла из блока списка "Files" ("Файлы")

* Выбрать ОК (Выполнить) для того, чтобы завершить выполнение ко-
  манды (или выбрать Сancel (Отменить) для того,  чтобы  покинуть
  блок диалога без загрузки файла);

* Выбрать Help (Помощь),  чтобы открыть окно, содержащее информа-
  цию о правилах использования данного блока диалога.

     После того,  как имя файла с расширением .TFS будет введено,
а этот файл загружен, система Turbo Profiler восстановит на экра-
не все сохраненные в этом файле параметры,  установки и статисти-
ческую информацию.

                    Меню "Print" ("Печать")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

               ЪДДДДДДДДДДДДї       ЪДДДДДДДДДДДДДДї
               і Statistics і       і Статистика   і
               і Module...  і       і Модуль...    і
               іДДДДДДДДДДДДі       іДДДДДДДДДДДДДДі
               і Options... і       і Параметры... і
               АДДДДДДДДДДДДЩ       АДДДДДДДДДДДДДДЩ

     Меню "Print" ("Печать") системы Turbo Profiler позволяет вы-
вести  содержимое  любого из открытых окон профилировщика в новый
или уже существующий дисковый файл или непосредственно  на  прин-
тер.

                Команда Statistics (Статистика)

     Команда Print|Statistics  (Печать|Статистика) выводит содер-
жимое всех открытых  окон  профилировщика  (КРОМЕ  окна  "Module"
("Модуль"))  на  печать  или  в  файл,  заданный  в блоке диалога
"Printing Options" ("Параметры печати").

     Перед тем,  как  воспользоваться  командой  Print|Statistics
(Печать|Статистика),  откройте  блок  диалога  "Printing Options"
("Параметры печати"), выбрав для этого команду Print|Options (Пе-
чать|Параметры), и удостоверьтесь в том, что для параметров печа-
ти (размеры страницы,  устройство вывода, используемый набор сим-
волов  и,  в  случае  вывода в файл,  имя соответствующего файла)
установлены необходимые значения.

     В случае  вывода  статистических  данных  в уже существующий
дисковый файл на экране появляется меню

          ЪДДДДДДДДДДДДДДДї        ЪДДДДДДДДДДДДДДДї
          і Append        і        і Добавить      і
          і Overwrite     і        і Пеpезаписать  і
          і Cancel        і        і Отменить      і
          АДДДДДДДДДДДДДДДЩ        АДДДДДДДДДДДДДДДЩ

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

                    Команда Module (Модуль)

     В блоке диалога "Pick a Module" ("Выберите модуль"), появля-
ющемся в результате выполнения команды  Print|Module  (Печать|Мо-
дуль), можно указать модуль программы для вывода на принтер или в
дисковый файл,  имя которого задано  в  блоке  диалога  "Printing
Options" ("Параметры печати").

      Для распечатки  исходного  текста  программы  можно выбрать
конкретный модуль по имени или выбрать в меню  All  Modules  (Все
модули). При печати текста модуля профилировщик создает АННОТИРО-
ВАННЫЙ ЛИСТИНГ исходного текста,  в  котором  каждой  строке  или
подпрограмме, помеченной в качестве фрагмента, сопутствуют время,
затраченное на ее выполнение,  и количество  ее  вызовов.  Пример
этого листинга  приведен  на  рис.  2.38 (см.  оригинальное руко-
водство).

   Рис. 2.38. Аннотированный  листинг исходного  текста программы
              PRIME1

                  Команда  Options  (Параметры)

     При выборе  команды  Options  (Параметры) из меню Print (Пе-
чать), на экране появляется блок диалога "Printing Options" ("Па-
раметры печати") (см. рис. 2.39 в оригинальном руководстве).

     Рис. 2.39. Блок диалога "Printing Options" ("Параметры печа-
                ти")

* В блоке ввода "Width" ("Ширина") задается число печатаемых сим-
  волов в каждой строке (по умолчанию 80).

* В  блоке ввода "Heigth" ("Высота") задается число строк в стра-
  нице (по умолчанию 66).

* Псевдокнопки "Printer"/"File" ("Принтер"/"Файл") позволяют  вы-
  бирать  между  выводом  статистических  данных на принтер или в
  файл. По умолчанию используется значение  Printer  (Принтер).

* При помощи псевдокнопок "Graphics"/"ASCII" ("Графика"/ "ASCII")
  можно выбрать  набор  символов,  используемый  при печати (либо
  расширенный набор символов IBM,  включая символы псевдографики,
  либо  печать только символов ASCII).  По умолчанию используется
  значение  ASCII.

* В блок ввода "Destination File"  ("Файл  назначения")  вводятся
  сведения  о дисковом файле,  в который осуществляется вывод.  В
  этой позиции указываются имя  дисковода  (необязательно),  путь
  (необязательно) и имя файла (обязательно).

                   Меню "Options" ("Параметры")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДї    ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Macros            і    і Макросы                         і
і Display options...і    і Параметры отображения...        і
і Path for source...і    і Путь поиска исходного текста... і
і Save options...   і    і Сохранить параметры...          і
і Restore options...і    і Восстановить параметры...       і
АДДДДДДДДДДДДДДДДДДДЩ    АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     При помощи меню "Options" ("Параметры") можно:

* Создать макрокоманду.

* Удалить  одну или все макрокоманды.

* Установить параметры отображения,  задающие внешний вид системы
  Turbo Profiler и ее работу.

* Задать каталоги (отличные от текущего), в которых система Turbo
  Profiler будет вести поиск исходных текстов.

* Записать в файл конфигурации параметры окон,  макросы, парамет-
  ры,  установленные в других меню,  и некоторые другие различные
  параметры.

* Восстановить параметры, которые были предварительно сохранены в
  файле конфигурации.

                         Macros (Макросы)

     При выборе команды Options|Macros (Параметр|Макросы) на  эк-
ране появляется меню, предоставляющее возможность создавать новые
макрокоманды и удалять ранее определенные макрокоманды.

ЪДДДДДДДДДДДДДДДДДДДДДДДї    ЪДДДДДДДДДДДДДДДДДДДДДДДДДї
і Create...       Alt = і    і Создать...        Alt = і
і Stop recording  Alt - і    і Закончить запись  Alt - і
і Remove                і    і Удалить                 і
і Delete all            і    і Удалить все             і
АДДДДДДДДДДДДДДДДДДДДДДДЩ    АДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Имеющийся в профилировщике аппарат  создания  макроопределе-
ний предоставляет   возможность   запоминать  часто  используемые
последовательности нажатия клавиш и оформлять их отдельной макро-
командой.  Например,  во  время сеанса профилирования можно часто
использовать одну и ту же  последовательность  команд  для  того,
чтобы  переходить  к рассмотрению какого-то определенного участка
программы. С помощью данного аппарата можно  определить  макроко-
манду, которая  воспроизводит  все  записанные последовательности
нажатия клавиш.  После определения макрокоманды, выполнить рутин-
ную задачу можно простым нажатием клавиши вызова макрокоманды.

                     Команда Create (Создать)
                            Вызов: {Alt=}

     В результате  выполнения команды Create (Создать) начинается
запоминание нажатий на клавиши,  которые будут составлять опреде-
ляемый макрос.  Клавишей  активации для команды Create (Создать)
является {Alt=}.

            Команда Stop Recording (Остановить запись)
                            Вызов: {Alt-}

     Команда Stop  Recording (Остановить запись) прекращает запо-
минание нажатий на клавиши, соответствующих создаваемому макросу.
Эту   команду   необходимо   использовать  после  вызова  команды
Options|Macros|Create (Параметры|Макросы|Создать). Клавишей акти-
вации для данной команды является {Alt-}.

                     Команда Remove (Удалить)

     Команда Remove (Удалить) удаляет макрос, соответствующий ка-
кой-нибудь клавише. Во время выполнения данной команды появляется
подсказка,  содержащая просьбу  нажать  клавишу,  соответствующую
удаляемому макросу.

                Команда Delete  All (Удалить все)

     Команда Delete All (Удалить все) удаляет все  макроопределе-
ния  и возвращает всем клавишам их первоначальные значения (зада-
ваемые по умолчанию).

                    Создание макроопределений

     Для определения макрокоманды следует:

1. Для того, чтобы приступить к определению макрокоманды, следует
   выбрать команду Options|Macros|Create (Параметры| Макросы|Соз-
   дать) (или нажать {Alt=}) . На экране появится запрос с требо-
   ванием указать клавишу, которую будет использоваться для вызо-
   ва определяемой макрокоманды.

2. Нажать клавишу (или последовательность клавиш), которая еще не
   используется никакой операцией, например, {Shift}{F10}.

3. После этого все последовательности нажатия клавиш записываются
   и становятся  частью макроопределения. Однако в макроопределе-
   ния не включаются последовательности,  необходимые  для  ввода
   входной информации прикладной программы,  а также для работы с
   мышью.

4. Закончить запись макроса - нажать {Alt-}  или  клавишу  вызова
   макрокоманды (в данном примере {Shift}{F10}).

5. Сохранить  макрос  в файле конфигурации - выбрать Macros (Мак-
   росы) в блоке диалога "Save Configuration" ("Сохранить  конфи-
   гурацию"). Введите  имя  соответствующего  файла  конфигурации
   (или используйте одно из перечисленных в данном  блоке  диало-
   га), затем выберите ОК (Выполнить).

6. Продолжить профилирование.

     Блок диалога "Display Options" ("Параметры изображения")

     Команда Options|Display Options (Параметры|Параметры отобра-
жения) открывает блок диалога "Display Options" ("Параметры отоб-
ражения"), показанный  на  рис.  2.40  (см.  оригинальное   руко-
водство).

     Рис. 2.40.  Блок диалога "Display Options" ("Параметры отоб-
                 ражения")

     С помощью блока диалога "Display Options" ("Параметры  отоб-
ражения") можно выполнить любую из следующих операций:

* Указать системе Turbo Profiler, следует ли ей во время выполне-
  ния прикладной программы осуществлять перестановку экранов

* Установить ширину отступа,  задаваемого для каждой табуляции  в
  окне "Module" ("Модуль")

* Задать  количество строк на экране среды системы Turbo Profiler
  равным 25 или 43/50

* Задать  количество  позиций,  отводимое  в   окнах   "Execution
  Profiler"  ("Профиль  выполнения")  и "Areas" ("Фрагменты") для
  отображения имен подпрограмм, входящих в прикладную программу.

            Параметр Display Swapping (Смена экранов)

     Псевдокнопки выбора  значений  параметра  "Display Swapping"
("Смена экранов") устанавливает  два  варианта  наложения  экрана
пользователя на экран среды Turbo Profiler и наоборот:  None (Ни-
когда) и Always (Всегда).

* Значение None (Никогда) указывает на  то,  что  наложение  этих
  двух экранов никогда не происходит.

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

* Значение Always (Всегда) предполагает наложение экрана  пользо-
  вателя на  экран системной среды при каждом выполнении приклад-
  ной программы.

     Используйте это значение в том случае, если прикладная прог-
рамма выводит на экран какую-либо информацию.
     При профилировании прикладной программы среды Windows  уста-
навливается только значение Always.

              Параметр Screеn Lines (Строки экрана)

     Параметр Screen Lines (Строки экрана) применяется для  того,
чтобы указать,  будет ли экран системы Turbo Profiler состоять из
25 строк, или количество строк составит 43 или же 50, что возмож-
но при использовании дисплейных адаптеров EGA и VGA.

     В зависимости от типа установленного видеоадаптера,  появля-
ется либо одна псевдокнопка,  либо две.  В системе с  монохромным
дисплеем либо с Color Graphics Adapter (CGA) (Цветной графический
адаптер) возможен только 25-ти строчный режим.

            Блок ввода "Tab Size" ("Размер табуляции")

     В блоке  ввода  "Tab Size" ("Размер табуляции") устанавлива-
ется ширина отступа, задаваемого при каждой табуляции, причем это
значение составляет от 1 до 32 позиций экрана. Ширину табуляцион-
ного отступа можно сократить для того, чтобы на экране помещалась
большая часть текста тех программ, в которых активно используются
отступы.

            Блок ввода "Width of Names" ("Длина имен")

     В блоке ввода "Width of Names" ("Длина имен") задается коли-
чество позиций,  отводимое в окнах "Execution Profile"  ("Профиль
выполнения"),  "Callers"  ("Вызывающие  подпрограммы")  и "Areas"
(Фрагменты) для отображения имен подпрограмм.

        Команда Path for Source (Путь поиска исходных текстов)

     По умолчанию  Turbo  Profiler  осуществляет  поиск  исходных
текстов в следующих каталогах и в следующем порядке:

1. В каталоге,  где программа была откомпилирована.

2. В каталогах,  указанных в параметрах "Options|Path for Source"
("Параметры|Путь поиска исходного текста") (или указанных  в  ко-
мандной строке с помощью ключа -sd).

3. В текущем каталоге.

4. В  каталоге,  содержащем файл с расширением .EXE профилируемой
программы.

     С помощью команды Options|Path  for  Source  (Параметры|Путь
поиска исходного текста) можно расширить список каталогов,  в ко-
торых система Turbo Profiler будет вести поиск  исходных  текстов
перед тем, как проводить поиск в текущем каталоге.

     Введите имена каталогов,  где должен осуществляться поиск, в
следующем формате:

     Каталог; Каталог; Каталог

     Например:

     С:\Borland\TC; C:\Borland\TASM

            Команда Save Options (Сохранить параметры)

     При помощи команды Options|Save Options (Параметры|Сохранить
параметры) можно сохранить все текущие значения параметров профи-
лировщика в файле конфигурации на диске.  Затем, в случае необхо-
димости установить идентичные значения параметров профилировщика,
файл с  данной  конфигурацией  можно  загрузить с помощью команды
Options|Restore Options (Параметры|Восстановить параметры).

     При выборе команды Options|Save Оptions  (Параметры|  Сохра-
нить   параметры)   на   экране  появляется  блок  диалога  "Save
Configuration" ("Сохранить конфигурацию") (см. рис. 2.41 в ориги-
нальном руководстве).

     Рис. 2.41. Блок диалога "Save "Configuration" ("Сохранить
                  конфигурацию")

     С его помощью можно сохранить  текущие  значения  параметров
профилировщика,  компоновку его окон и макроопределения. Элементы
"Options"  ("Параметры"),  "Layout"  ("Компоновка")  и   "Macros"
("Макросы") выполнены в стиле индикаторов состояния; можно сохра-
нять один,  два или все три перечисленных типа информации в файле
конфигурации.

* Options  (Параметры) относится к устанавливаемым с помощью меню
  параметрам,  которые не сохраняются в файлах с расширением .TFA
  или TFS (такие,  как "Options|Path for Source" ("Параметры|Путь
  поиска исходного текста"),  параметры командной строки и значе-
  ния,  заданные  в  блоке  диалога "Display Options" ("Параметры
  отображения")).

* Layout (Компоновка) содержит сведения о том, какие из окон отк-
  рыты  в текущий момент,  а также каков их порядок,  положение и
  размеры.

* Macros (Макросы) относится ко всем тем  макроопределениям  кла-
  виш, которые задействованы в настоящий момент.

* Блок  ввода "Save To" ("Сохранить в") содержит имя файла конфи-
  гурации,  задаваемое по умолчанию, TFCONFIG.TF. Для того, чтобы
  сохранить конфигурацию  в  этом файле,  выберите ОК (Выполнить)
  или нажмите клавишу {Enter}.

     Для того,  чтобы сохранить свои параметры  в  другом  файле,
     введите имя этого другого файла ( с указанием имени дисково-
     да и пути, если хотите), выберите ОК (Выполнить) или нажмите
     клавишу {Enter}.

     Cохранив значения  параметров в файле конфигурации,  в любой
момент можно их восстановить при помощи  команды  Options|Restore
Options (Параметры|Восстановить параметры).

         Команда Restore Options (Восстановить параметры)

     Команда Options|Restore Options (Параметры| Восстановить па-
раметры) восстанавливает значения параметров профилировщика, сох-
раненные на диске.  Можно хранить множество различных файлов кон-
фигурации, содержащих различные макросы, компоновки окон и т.д.

     При выборе   команды   Options|Restore  Options  (Параметры|
Восстановить параметры), на экране появляется блок диалога, пока-
занный на рис. 2.42 (в оригинальном руководстве).

     Рис. 2.42. Блок диалога Restore Options (Восстановить па-
                раметры)

     Блок диалога Restore Options (Восстановить параметры)  рабо-
тает идентично другим блокам диалога профилировщика, служащим для
загрузки файлов. Предоставляются следующие возможности:

* Ввести  имя файла или спецификацию имени файла,  включающую ме-
  тасимволы DOS) в блок ввода "File name" ("Имя файла").

* Выбрать любой  дисковод или каталог в системе каталогов.

* Выбрать имя файла из блока списка "Files" ("Файлы").

* Выбрать ОК (Выполнить) для  завершения  операции  (или  выбрать
  Cancel  (Отменить)  для  того,  чтобы покинуть блок диалога без
  загрузки файла).

* Выбрать "Help" ("Помощь") для того,  чтобы открыть окно, содер-
  жащее  информацию  о правилах использования данного диалогового
  окна.

     После ввода или выбора имени файла конфигурации  и  загрузки
этого  файла система Turbo Profiler восстановит в своей среде все
параметры,  заданные значения,  компоновку окон и макросы, сохра-
ненные в файле конфигурации.

     (Можно восстанавливать только те файлы конфигурации, которые
были созданы при помощи команды  Options|Save  Options  (Парамет-
ры|Сохранить параметры)).

                      Меню "Window" ("Окно")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Zoom                F5і і Распахнуть                       F5 і
і Next                F6і і Следующее                        F6 і
і Next pane          Tabі і Следующая панель                Tab і
і Size/move      Ctrl-F5і і Изменить размер/Переместить Ctrl-F5 і
і Iconize/restore       і і Заменить на условное                і
і                       і і обозначение/Восстановить            і
і Close           Alt-F3і і Закрыть                      Alt-F3 і
і Undo close      Alt-F6і і Отменить закрытие            Alt-F6 і
іДДДДДДДДДДДДДДДДДДДДДДДі іДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі
і User screen     Alt-F5і і Экран пользователя           Alt-F5 і
і 1 Module              і і                                     і
і 2 Profile             і і                                     і
АДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Меню "Window" ("Окно") содержит в себе команды, позволяющие:

* Манипулировать окнами системы Turbo Profiler.

* Перемещаться внутри и между окнами.

* Превращать окна в их условные обозначения и наоборот.

* Закрывать и вновь открывать окна.

* Переходить к экрану,  на который осуществляет вывод  прикладная
  программа.

* Активизировать открытое окно.

     Команды в верхней части меню "Window" ("Окно") предназначены
для передвижений в оконной среде профилировщика  и  реорганизации
окон согласно   потребностям.   Большинство  окон  системы  Turbo
Profiler имеет все стандартные  элементы,  используемые  в  окнах
(полосы прокрутки,  маркер закрытия окна,  маркер увеличения окна
на весь экран и т.д.).  Подробные сведения об этих элементах окна
и  порядке  их  использования  содержатся в разделе "Окна системы
Turbo Profiler" части 1 настоящей главы.

                      Команда Zoom (Распахнуть)

     Команда Zoom (Распахнуть) увеличивает на весь экран активное
окно (т.е. окно, обрамленное двойным бордюром) или возвращает ок-
но в исходное состояние.

                      Команда  Next  (Следующее)

     Команда Next (Следующее) активизирует окно с номером, следу-
ющим за номером текущего активного окна.

                 Команда Next Pane (Следующая панель)

     В окнах  с несколькими панелями команда Next Pane (Следующая
панель) перемещает курсор на следующую панель.

           Команда Size/Move (Изменить размер/Переместить)

     Команда Size/Move  (Изменить  размер/Переместить)  переводит
профилировщик в режим организации окон.  текущее окно можно пере-
мещать  при  помощи  клавиш  управления курсором "стрелка-влево",
"стрелка-вправо", "стрелка-вверх" и  "стрелка-вниз".  Окно  можно
расширить или сузить, одновременно нажав клавишу {Shift} и клави-
шу управления курсором.  Информация, находящаяся в строке состоя-
ния,  сообщает  о том,  какие действия осуществляются при нажатии
той или иной комбинации клавиш.  Клавишей активации этой  команды
является {Ctrl}{F5}.

Команда Iconize|Restore  (Заменить   на   условное   обозначение|
                          Восстановить)

     Команда Iconize|Restore  (Заменить  на условное обозначение|
Восстановить) производит сжатие активного окна до его  пиктограм-
мы,  а также разворачивает пиктограмму до размеров окна.  На рис.
2.43 показаны окна и пиктограммы окон  на  экране  системы  Turbo
Profiler.

     Имеющаяся в  системе  Turbo  Profiler  возможность  работы с
пиктограммами окон является полезным средством,  позволяющим отк-
рывать  одновременно несколько окон,  не загромождая при этом эк-
ран. Пиктограмма - это небольшая картинка, идентифицирующая соот-
ветствующее открытое окно,  как это показано на рис.  2.43 (см. в
оригинальном руководстве).

                  Рис. 2.43.  Окна и их пиктограммы

     Для того, чтобы преобразовать окно в пиктограмму, необходимо
выбрать команду Iconize|Restore (Заменить на  условное  обозначе-
ние|Восстановить)  из  меню "Window" ("Окно") или подвести указа-
тель мыши к маркеру замены на пиктограмму,  находящемуся на верх-
ней части рамки окна, и нажать кнопку. Для того, чтобы вновь пре-
образовать  окно   в   пиктограмму,   следует   выбрать   команду
Iconize|Restore (Заменить  на  условное обозначение|Восстановить)
или подвести указатель мыши к маркеру замены на пиктограмму и на-
жать кнопку.

                       Команда Close (Закрыть)

     Команда Close (Закрыть) временно убирает текущее окно с  эк-
рана системы Turbo Profiler. Для того, чтобы опять отобразить это
окно на экране точно в том виде,  как оно выглядело, выберите ко-
манду  Undo Close  (Отменить закрытие).

                Команда Undo Close (Отменить закрытие)

     Команда Undo Close (Отменить закрытие)  вновь  открывает  то
окно, которое было закрыто самым последним, и делает это окно ак-
тивным.

              Команда  User Screen  (Экран пользователя)
                           Вызов: {Alt}{F5}

     Выберите команду  Window|User Screen (Окно|Экран пользовате-
ля) (или нажмите {Alt}{F5}) для того, чтобы увидеть данные, выво-
димые прикладной программой на экран.

     Нажмите любую клавишу, чтобы вернуться в систему окон профи-
лировщика.

                       Список открытых окон

     В нижней  части  меню "Window" ("Окно") находится пронумеро-
ванный список открытых окон. Нажмите клавишу, соответствующую од-
ному из этих окон, для того, чтобы активизировать это окно. Более
подробное описание дано в предыдущей главе.

                      Меню "Help" ("Помощь")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

   ЪДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДї
   і Index          Shift-F1 і і Каталог          Shift-F1 і
   і Previous topic   Alt-F1 і і Предыдущая тема    Alt-F1 і
   і Help on help            і і Помощь по помощи          і
   АДДДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Меню "Help" ("Помощь") предоставляет  оперативный  доступ  к
вспомогательной информации   через   специальное  окно  в  режиме
"онлайн". Вспомогательная информация предоставляется  практически
по всем  аспектам  функционирования  среды  и самой системы Turbo
Profiler.  (Кроме того,  при выборе любой  из  команд,  в  строке
состояния  появляется меню доступа к вспомогательной информации и
рекомендуемая функция).

     Для того,  чтобы открыть окно "Help" ("Помощь"),  можно:

* Нажать {F1} или {Alt}{F1} в любое время (в том числе при работе
  в любом из диалоговых окон или при выборе любой команды меню).

* С помощью мыши выбрать Help (Помощь), при его появлении в стро-
  ке состояния или в блоке диалога.

     Для того, чтобы закрыть окно "Help" ("Помощь"), следует либо
нажать клавишу {Esc},  либо при помощи мыши активизировать маркер
закрытия, (установив на него указатель мыши и нажав кнопку мыши),
либо выбрать команду  Window|Close (Окно|Закрыть).

     Экраны помощи часто содержат КЛЮЧЕВЫЕ СЛОВА (текст, выделен-
ный световым  маркером),  которые  также можно  выбрать для того,
чтобы получить более подробную информацию.  Для того, чтобы полу-
чить более подробные сведения о выбранном ключевом слове. при по-
мощи клавиш управления курсором следует переместиться к любому из
ключевых слов,  а затем нажать клавишу {Enter}.  Для того,  чтобы
переместиться соответственно на  первое  или  последнее  ключевые
слова,  находящиеся  на  экране  можно  воспользоваться клавишами
{Home} и {End}.  С помощью мыши также можно активизировать  любое
из  ключевых  слов  для получения его описания (установив на него
указатель и нажав кнопку мыши).

                     Команда Index (Каталог)
                          Вызов: {Shift}{F1}

     Команда Help|Index (Помощь|Каталог) открывает диалоговое ок-
но,  в котором отображен полный список ключевых слов помощи (спе-
циальных выделенных участков текста на экранах помощи,  позволяю-
щих быстро переходить к соответствующему экрану).

     По этому списку можно перемещаться постранично.  При обнару-
жении искомого ключевого слова,  выберите его при  помощи  клавиш
управления  курсором  и  нажмите клавишу {Enter}.  (К этому слову
также можно подвести указатель мыши и два раза нажать на ее кноп-
ку).

            Команда  Previous Topic (Предыдущая тема)
                           Вызов: {Alt}{F1}

     Команда Help|Previous Topic (Помощь|Предыдущая тема)  откры-
вает  окно  "Help"  ("Помощь")  и повторно показывает в этом окне
последний из просмотренных текстов.

     Система Turbo Profiler позволяет просматривать таким образом
до  20  предыдущих  экранов  помощи.  Для того,  чтобы посмотреть
последний из отображенных экранов помощи,  можно при помощи  мыши
активизировать команду  PgUp  (установив  на нее указатель мыши и
нажав кнопку мыши) , находящуюся в строке состояния.

             Команда  Help on Help (Помощь по помощи)

     Команда Help|Help  on Help (Помощь|Помощь по помощи) отобра-
жает на экране текст,  в котором  объясняется,  как  пользоваться
системой помощи профилировщика.

               ГЛАВА 3. СТРАТЕГИЯ ПРОФИЛИРОВАНИЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Если вы поначалу не уверены в том, какие из фрагментов прог-
раммы являются ее "узкими местами",  то с помощью  системы  Turbo
Profiler проверьте ход ее выполнения,  используя параметры, уста-
навливаемые по умолчанию. После этого, просмотрев результаты про-
филирования в окне "Execution Profile", вы получите представление
о том,  на выполнение каких из подпрограмм в программе затрачива-
ется наибольшее время.  Сопоставив одновременно отображаемую вре-
менную и количественную статистику,  вы поймете,  на каждый вызов
каких фрагментов  программы  затрачивается  больше всего времени.
Обладая этой информацией, вы можете начинать работу по устранению
недостатков в программе.

     Система Turbo  Profiler  предоставляет  несколько  различных
окон отчета,  предназначенных для отображения и анализа собранных
статистических данных; вы также можете распечатать содержимое та-
кого окна на бумаге либо записать его на диск для  последователь-
ного учета результатов повышения производительности программы.  В
окнах отчета вы можете  просмотреть  временную  и  количественную
статистику выполнения программы,  данные о работе с файлами,  ин-
формацию о прерываниях DOS и работе с оверлеями, а также данные о
последовательности вызова подпрограмм.

     Как следует  использовать все эти возможности и гибкость ин-
формации?  Как использовать систему Turbo Profiler  для  наиболее
оптимального и эффективного профилирования программ? В чем заклю-
чаются характерные особенности профилирования?  Очевидно,  что  в
этой  главе  мы  просто  не сможем дать ответ на все поставленные
вопросы. Но, тем не менее, мы опишем некоторые основные принципы,
методы  и  стратегию профилирования для того,  чтобы помочь вам в
работе с системой.

      При первом запуске программы в среде Turbo Profiler система
производит следующие действия:

   * Устанавливает активный режим профилирования

   * Автоматически   просматривает  текст  .EXE-файла  в  поисках
     основного программного модуля

   * Загружает текст основного модуля в окно "Module"

   * Устанавливает маркеры фрагментов для программы

   * Устанавливает курсор в начало основного модуля

     Основным модулем является тот,  в котором  содержится  самая
первая  выполняемая  строка  исходного текста программы.  Маркеры
фрагментов являются "точками разметки"  участков  программы,  для
которых вы хотите получить статистические данные;  число установ-
ленных маркеров зависит от количества строк в .ЕХЕ-файле,  содер-
жащем отладочную информацию, ассоциируемую с этими строками.

     Всякий раз,  когда  вы  выходите  из системы Turbo Profiler,
происходит автоматическое сохранение информации о фрагментах, по-
меченных  в  текущей загруженной программе,  в файле фрагментов с
именем "имя файла.TFA", где "имя файла" совпадает с названием ва-
шей программы.  Каждый раз при загрузке программы с целью ее про-
филирования  система  Turbo  Profiler  осуществляет  поиск  соот-
ветствующего  файла  с расширением .TFA и в случае наличия такого
файла автоматически использует установленную разметку фрагментов.

     Вы также  можете сохранить результаты профилирования в файле
с расширением .TFS,  используя для этого команду  Statistics/Save
(Статистика/Сохранить).  По умолчанию имя такого файла статистики
будет иметь вид:  "имя файла.TFS". Вы можете воспользоваться име-
нем,  задаваемым  по умолчанию,  либо изменить его (в том случае,
если вы хотите сохранить более одного набора статистических  дан-
ных для одной и той же программы).

     Примечание: рекомендуется  сохранять результаты профилирова-
                 ния,  получение которых занимает много  времени,
                 на тот случай, если у вас возникнет желание про-
                 анализировать эти данные позднее.

            ПОДГОТОВКА К ПРОЦЕССУ ПРОФИЛИРОВАНИЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Примеры, приведенные  в  главе  1,  небольшие  и  достаточно
простые;  эти программы были созданы для того, чтобы в общих чер-
тах показать процесс профилирования. Основной задачей, поставлен-
ной  в  первой  главе,  являлось  совершенствование  подпрограммы
"prime", а не определение "узких мест" конкретной программы.

     Однако, реально использование профилировщика  гораздо  более
необходимо при написании очень больших программ, а не тогда, ког-
да программы являются небольшими по своему размеру, так как преж-
де  чем  вы  сможете усовершенствовать данный фрагмент программы,
вам придется выявить в ней "узкие места".  По ряду  причин  найти
эти места в программе легче, нежели придумать, что с ними следует
делать дальше.

                   Корректировка программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

     Вот некоторые основные технические приемы,  используемые при
поиске "узких мест" в больших программах:

   * Выберите  в программе достаточно большие наборы входных дан-
     ных для получения наиболее информативных результатов  профи-
     лирования.

     Если вы будете профилировать программу поиска строки,  пода-
     вая ей на вход файл,  состоящий из трех строк, то вы не смо-
     жете  почерпнуть  достаточной информации из полученных в ре-
     зультате этого данных.  Точно так же поиск короткой  строки,
     входящей почти в каждую из строк файла с общим числом строк,
     равным 10000,  даст профиль,  совершенно не похожий на  тот,
     который  бы  получился  в  результате поиска длинной строки,
     встречающейся в данном файле всего один единственный раз.

       Примечание: выбор соответствующих входных данных для прог-
                   раммы  -  это очень важный момент,  на который
                   следует обратить особое внимание.

   * Если вы знаете, что программа выполняется достаточно быстро,
     то целесообразно задать для профилировщика режим сбора  ста-
     тистических  данных о результатах нескольких выполнений этой
     программы.  (Значение параметра Run Count (Число выполнений)
     в  блоке диалога "Profiling Options" позволяет собирать ста-
     тистику для заданного числа прогонов программы).

   * Измените  программу таким образом,  чтобы она работала неза-
     висимо от ввода с клавиатуры,  или блокируйте те  фрагменты,
     которые обрабатывают информацию, вводимую с клавиатуры.

     Если работа программы зависит от ввода с клавиатуры, то счи-
     тайте  данные  из  файла или используйте генератор случайных
     чисел для заполнения массива числами. Основная идея заключа-
     ется в выборе типовых реальных данных,  с которыми может ра-
     ботать модуль.

   * Изолируйте модули программы, которые, как вы уверены, нужда-
     ются в улучшении.

                    Компиляция программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Turbo Profiler может использовать следующие программные про-
дукты фирмы Borland:  ряд компиляторов языка C++;  систему  Турбо
Паскаль версии  5.0  или  более поздней;  систему Турбо ассемблер
версии 1.0 или более  новой.  Вы  должны  компилировать  исходный
текст программы с полностью заданной символьной отладочной инфор-
мацией.

     Примечание: файлы,  откомпилированные для их отладки  с  по-
                 мощью  системы  Турбо отладчик,  могут использо-
                 ваться в системе Turbo  Profiler  без  повторной
                 компиляции.

     Необходимо использовать следующие команды компиляторов:

   * Турбо  Паскаль:  для параметров Standalone Debugqing и Debug
     Information должно быть установлено значение On.

   * Ряд компиляторов языка C++ фирмы Borland:  должна быть акти-
     визирована командная "кнопка" установки режима Standalone.

   * Турбо  ассемблер:  необходимо транслировать исходный текст с
     помощью опции командной строки /zi и затем построить  загру-
     зочный  модуль  при помощи программы TLINK,  используя опцию
     /v.

     Для запуска  системы  Turbo  Profiler  необходимо  иметь как
EXE-файл,  так и тексты исходных файлов.  Turbo Profiler осущест-
вляет  поиск  файлов  с  исходными текстами в следующих каталогах
(обращение к каталогам происходит в том порядке,  в  котором  они
перечислены):

  1. В том каталоге, в которой они находились во время компиляции
     (эта информация имеется в выполняемом файле)

  2. В каталоге, задаваемом командой Options/Path for Source (или
     в каталоге, задаваемом опцией -sd командной строки)

  3. В текущем каталоге

  4. В каталоге,  содержащем .EXE-файл профилируемой в данный мо-
     мент программы

           Установка фрагментов для профилирования
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Как только  вы привели текст программы к виду,  позволяющему
сконцентрировать внимание на ее "узких местах", и откомпилировали
свою программу с использованием отладочной информации,  вы готовы
к тому,  чтобы выполнить ее в среде профилировщика и  осуществить
сбор  статистических  данных для отдельных фрагментов.  Вы можете
начать с профилирования всей программы в целом и затем постепенно
сфокусировать  свое  внимание на все более мелких деталях по мере
того,  как будут выявляться  вызывающие  у  вас  неудовлетворение
фрагменты программы. Начните с определения фрагментов, используе-
мых по умолчанию,  - система Turbo Profiler задает такие фрагмен-
ты, основываясь на плотности символов, находимых ею в выполняемом
файле.

      "Фрагментом" называется участок программы,  для которого вы
хотите получить статистические данные. Фрагментом может быть одна
единственная строка,  некоторая конструкция (например,  цикл) или
целая подпрограмма. Маркер фрагмента устанавливает в месте своего
расположения точку прерывания выполнения  программы.  Как  только
профилировщик  встречает  такую точку,  он выполняет определенный
набор команд, - в зависимости от того, какие параметры были зада-
ны для данного фрагмента.  Этот набор команд профилирования может
представлять собой подпрограмму ведения учета или простую команду
остановки выполнения программы.

     Вот те действия,  которые может осуществлять профилировщик с
началом выполнения фрагмента:

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Режим   работы               Что происходит в данном режиме
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Normal                       Начинается   сбор   статистических
                             данных в  режиме по умолчанию (для
                             каждого помеченного маркером фраг-
                             мента  собирается количественная и
                             временная статистика).

Enable                       Устанавливается   режим      сбора
                             статистики (в  том  случае,   если
                             перед этим он был отменен).

Disable                      Отменяется режим сбора статистиче-
                             ских данных,  выполнение же  прог-
                             раммы продолжается.  Если начинает
                             выполняться  фрагмент   программы,
                             для которого задан режим "Enable",
                             то профилировщик возобновляет сбор
                             статистических данных.

Stop                         Выполнение программы  прекращается
                             и управление  передается  в  среду
                             системы Turbo Profiler ( или  DOS,
                             если вы выполняете программу в па-
                             кетном режиме).  В этот момент  вы
                             можете изучить собранные статисти-
                             ческие данные,  а затем опять  во-
                             зобновить выполнение программы.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     По умолчанию система Turbo  Profiler  подсчитывает,  сколько
раз  за время выполнения программы управление передается на фраг-
мент и сколько времени занимает выполнение  этого  фрагмента.  Вы
можете изменить действия профилировщика,  которые он производит в
ходе выполнения фрагмента, установив соответствующим образом зна-
чение  параметра  Operation (Режим работы) в блоке диалога "Areas
Options",  который можно вызвать с помощью  локальных  меню  окон
"Module" и "Areas".

     При определении фрагментов в своей программе перед тем,  как
начать получение ее профиля, вам необходимо учесть следующее:

   * Для какого количества фрагментов должна  быть  собрана  ста-
     тистика?

   * Профиль каких участков программы должен быть получен?

   * Что должно произойти в каждом из помеченных  маркером  фраг-
     ментов?

          Какой уровень детализации вам необходим?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД-

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

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

   * Для больших программ необходима меньшая степень детализации;
     скорее всего, будет вполне достаточно подсчитать лишь время,
     затрачиваемое на выполнение каждой из подпрограмм.

     Понятие "большая программа" является несколько расплывчатым:
следует принять во внимание такие характеристики  программы,  как
количество  модулей  в исходном тексте,  количество подпрограмм и
количество строк.

     Если исходный текст состоит из 10 тысяч строк,  содержащихся
в  10 модулях,  то было бы вполне разумно проанализировать каждый
модуль отдельно в режиме активного анализа.  (Ваша программа раз-
бита на отдельные функциональные модули, не так ли?)

     С другой стороны,  если программа содержит менее 100 строк и
вы нуждаетесь в ее детальном анализе,  то вы,  возможно, захотите
получить статистические данные для каждой из строк.

     Если время выполнения программы не превышает пяти секунд, то
вы получите более точные результаты профилирования, если выполни-
те  эту  программу несколько раз и затем усредните полученные ре-
зультаты.  (Определите число выполнений программы при помощи  ко-
манды Statistics/Profiling Options). Если программа выполняется в
течение часа (без учета времени,  расходуемого на получение  ста-
тистических  данных),  будьте  осторожны при разметке фрагментов:
если вы пометите маркерами слишком много фрагментов, то время вы-
полнения программы может стать неприемлемо большим.

                    Добавление фрагментов

     Разбейте программу на ряд фрагментов,  выбрав для этого  ко-
манду  Add  Areas  (Добавить  фрагменты)  из локального меню окна
"Module"; затем прогоните программу для того, чтобы получить ста-
тистические данные для каждого из фрагментов.

     Если вы не укажете системе  Turbo  Profiler,  каким  образом
следует пометить фрагменты в программе,  то она использует схему,
задаваемую  по умолчанию и предусматривающую разумный выбор необ-
ходимых фрагментов.  Основываясь на  информации,  содержащейся  в
таблице символов данной программы, система Turbo Profiler выбира-
ет один из нескольких вариантов задания по умолчанию фрагментов в
программе:

   * Если в данной таблице содержится  незначительное  количество
     символов  и  программа состоит из одного модуля,  то система
     Turbo Profiler по умолчанию устанавливает режим  Every  Line
     in Module (Каждая строка в модуле).

   * Если  таблица  содержит  большое  количество символов и сама
     программа состоит из нескольких модулей,  то  система  Turbo
     Profiler  устанавливает по умолчанию режим All Routines (Все
     подпрограммы).

     Рекомендация: Если программа очень велика,  то  сначала  для
                   получения  общей картины мы советуем проверить
                   ход выполнения программы в пассивном режиме  и
                   затем выбрать определенные фрагменты для более
                   детального анализа.

                Какие данные вам необходимы?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     По умолчанию, система Turbo Profiler накапливает для каждого
фрагмента,  в активном и пассивном режиме профилирования, следую-
щую информацию:

   * Число обращений к фрагменту

   * Общее время, затраченное на выполнение фрагмента (в активном
     режиме профилирования)

   * Число  импульсов  таймера,  выдаваемых  во  время выполнения
     фрагмента (в пассивном режиме профилирования)

     Вы также можете собрать в ходе сеанса профилирования и более
обширную информацию:

   * Определив для параметра Statistics/Callers значение Enable и
     и установив  соответствующим  образом  параметр  Call  Stack
     (Стек  вызовов)  в  блоке диалога "Area Options",  вы можете
     проследить, какими подпрограммами вызывается помеченная мар-
     керами подпрограмма, - как часто это происходит и каковы пу-
     ти этих вызовов.

   * Если  активизирован  параметр  Statistics/Files   (Статисти-
     ка/Файлы), то вам становится доступной информация  о  работе
     программы с файлами.

   * Если активизирован параметр Statistics/Interrupts (Статисти-
     ка/ Прерывания), то для программы осуществляется регистрация
     прерываний.

   * Вы  можете  проследить  за  использованием программой файлов
     оверлеев, активизировав  для  этого   параметр   Statistics/
     Overlays (Статистика/Оверлеи).

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

     Помните, что  для получения необходимого отчета о профилиро-
вании следует установить соответствующие параметры до начала  вы-
полнения программы.

         В какой момент следует начать сбор данных?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Часто вам будет необходимо  собрать  только  временную  ста-
тистику в ходе выполнения какого-то определенного фрагмента прог-
раммы. Для этого начните выполнение программы без сбора какой-ли-
бо статистической    информации;    установите    для   параметра
Statistics/Accumulation     (Статистика/Накопление)      значение
Disabled.  Вы  можете  в  любое время определить,  какое значение
установлено для параметра Accumulation, вызвав для этого на экран
блок  "File/Get  Info"  ("Файл/Получить  информацию")  и проверив
состояние параметра Collection (Сбор).

     В том случае,  если для параметра  Accumulation  установлено
значение Disabled, вы должны перевести в режим Enable маркер того
фрагмента,  с которого вы хотите начать сбор данных,  затем пере-
вести в режим Disable маркер того фрагмента, с которого вы хотите
прекратить сбор статистических данных. Число таких точек, в кото-
рых  начинается  и прекращается сбор статистики,  ограничено лишь
объемом доступной оперативной памяти;  как правило, вы можете за-
дать столько таких точек, сколько необходимо.

  Каким образом следует сгруппировать временную статистику?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Профилировщик может  либо сохранять статистику о времени вы-
полнения для каждой из подпрограмм отдельно, либо объединять ее с
аналогичной  статистикой для вызывающих подпрограмм (для подпрог-
рамм, которыми были вызваны вышеупомянутые подпрограммы).

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

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

   * Если подпрограммой "А" не вызываются никакие другие подпрог-
     раммы, то она не будет отображена в качестве фрагмента в ок-
     не "Execution Profile".  Вместо этого  в  окне  отображается
     подпрограмма,  вызвавшая подпрограмму "А", с временным пока-
     зателем суммы времен выполнения данной подпрограммы и  подп-
     рограммы "A".

   * Если подпрограмма "А" вызывает какие-либо другие подпрограм-
     мы,  то она  (подпрограмма  "А")  будет  отображена  в  окне
     "Execution  Profile" в качестве элемента этого окна.  Время,
     ассоциируемое с подпрограммой "A",  - это время, необходимое
     для  выполнения  всех подпрограмм,  вызываемых подпрограммой
     "A",  без  учета  времени,  затрачиваемого   на   выполнение
     собственно подпрограммы "А".

     В режиме  анализа  по  умолчанию системой Turbo Profiler ве-
дется раздельный подсчет времени для каждой  помеченной  маркером
подпрограммы.

             Верификация и тестирование программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Если в процессе тестирования и верификации программ вы рабо-
таете с большими фрагментами исходного текста, то вам не потребу-
ется в таком же количестве детальная информация,  как при анализе
алгоритма. Тем не менее и в ходе этого процесса полезно иметь ин-
формацию о том,  сколько раз вызывалась та или иная подпрограмма.
Организуйте тестирование программ по иерархии связей подпрограмм.
При данном типе тестирования общий анализ может помочь  вам  убе-
диться в том,  что в процессе выполнения программы каждая из вет-
вей в операторе выбора  или  операторе  условного  перехода  была
использована хотя бы один раз.

    Посредством изучения  путей  вызова в окне "Callers" и вывода
на печать листинга исходного текста  (снабженного  количественной
статистикой) из окна "Module" вы можете проверить,  вызывались ли
подпрограммы в нужный момент времени. И если в установленное вре-
мя  какой-либо  блок программы не был выполнен,  то вы можете вы-
яснить причину этого.

   Подсчет времени  выполнения и контроль производительности
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При сборе временной статистики для программы большого разме-
ра с целью выявления участков,  замедляющих ее работу,  вам,  как
правило, не требуется эта информация на уровне строк. При подсче-
те временных характеристик вам необходимо знать две вещи:

  1. Сколько времени тратится на выполнение отдельной подпрограм-
     мы.

  2. Во сколько раз время выполнения возрастает при  переходе  от
     вложенных подпрограмм (подпрограмм низкого уровня) к внешним
     подпрограммам (подпрограммам более высокого уровня).

     Перед тем,  как  начать подсчет временных характеристик про-
цесса выполнения программы,  вам  необходимо  установить  маркеры
фрагментов для всех подпрограмм в исходном тексте.  В том случае,
если вы имеете дело с очень  большими  программами,  ограничьтесь
установкой  маркеров  фрагментов  только  лишь в одном модуле при
проведении каждого сеанса профилирования.

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

   * Используйте фильтры для того, чтобы временно сделать невиди-
     мой ненужную  вам  информацию  (при  помощи  команды  Filter
     (Фильтровать) из локального меню окна "Execution Profile").

   * Удалите маркеры фрагментов для тех подпрограмм, статистика о
     выполнении которых вас не  интересует  (при  помощи  команды
     Remove (Удалить) из локальных меню окон "Modulе", "Execution
     Profilе" и "Areas").

   * Объедините значения времени выполнения  для  рассматриваемых
     подпрограмм, отсчитываемые таймером (установив соответствую-
     щим  образом  параметр  Timer   с   помощью   команды   меню
     Statistics/Profiling  Options  либо команды в локальном меню
     Options окна "Areas").

     Если вы недостаточно ознакомлены с профилируемой программой,
то можете использовать временные характеристики и показатели про-
изводительности и одновременно изучать структуру незнакомой прог-
раммы.

           Изучение структуры незнакомой программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Одним из лучших способов изучения структуры незнакомой прог-
раммы является анализ динамической последовательности  (предысто-
рии)  вызовов  подпрограмм,  которая  отображается системой Turbo
Profiler в окне "Callers" ("Вызывающие подпрограммы"). Данная ин-
формация раскрывает структурную иерархию программы. Хотя в каждый
определенный момент времени (в окне "Callers") могут отображаться
пути вызова только какой-то одной подпрограммы, вы имеете возмож-
ность распечатать всю  полученную  информацию  о  путях  вызовов,
раскрыв  окно "Callers" и выбрав команду Print/Statistics (Распе-
чатать/Статистика).

     ЙНННН[*]ННCallersНННВНННННННННННННННННННННН3НН[ ] [ ]НН»
     є    main           і   1   main                       є
     є    a              і 100   main  a                    є
     є    b1             і                                  є
     є    b2             і                                  є
     є    c              і                                  є
     є                   і                                  є
     є                   і                                  є
     ИН<Ы°°°°°°°°°°°°°°°> ННННННННННННННННННННННННННННННННННј

     Рис. 3.1. Окно "Callers"

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

     Временная и  количественная статистика позволяет вам понять,
какие из подпрограмм являются наиболее важными. Контроль за рабо-
той  с  файлами  и оверлеями позволяет проследить за раскрытием и
закрытием любых рабочих  (временных)  файлов  в  ходе  выполнения
программы, а также за загрузкой в память оверлеев. Получить пере-
численные данные за счет лексического  анализа  программы  значи-
тельно сложнее.

     Профилировщик обеспечивает  связь  между  окнами  "Execution
Profile",  "Module" и "Areas",  что позволяет быстро перемещаться
вверхвниз по содержимому этих окон к требуемым символам, вскрывая
тем самым взаимосвязи между функционально  зависимыми,  но  физи-
чески удаленными друг от друга фрагментами исходного текста прог-
раммы.

          Какой режим анализа следует использовать?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В процессе  профилирования  одним  из  важных  моментов  для
рассмотрения  является  выбор режима анализа,  который может быть
активным,  пассивным или общим. Режим профилирования устанавлива-
ется  в  блоке  диалога  "Profiling  Options"  (выберите  команду
Statistics/Profiling Options).

     Как только вы убедились в безошибочной работе программы, ак-
тивный и пассивный режимы анализа будут представлять собой важное
средство в повышении производительности всей программы  в  целом.
Общий анализ,  с другой стороны,  является полезным средством для
совершенствования вашей  программы.  Вызывает  ли  программа  все
подпрограммы  в  соответствующее время?  Все ли участки программы
работают?  Это очень важные вопросы, ответы на которые могут быть
получены при профилировании в режиме общего анализа.

                       Активный анализ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     По умолчанию система Turbo Profiler работает в режиме актив-
ного анализа; автоматически собирается как временная, так и коли-
чественная статистика, а также и любые другие данные (как, напри-
мер,  информация о последовательности вызовов  подпрограмм  (пре-
дыстория вызовов) или о прерываниях DOS),  учет которых задан те-
кущими параметрами меню Statistics (Статистика).

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

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

     Примечание: с другими способами, позволяющими ускорить рабо-
                 ту в ходе сеанса профилирования, вы можете озна-
                 комиться в следующем разделе "Ускорение процесса
                 профилирования".

                      Пассивный анализ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если программа выполняется крайне медленно и вы вполне може-
те  обойтись без количественной статистики вызовов и их предысто-
рии, используйте пассивный режим анализа; в пассивном режиме про-
филировщик  собирает  только временную статистику,  относящуюся к
помеченным маркером фрагментам (такую,  как время выполнения, вы-
зовы по прерываниям, обращения к файлам). Профилирование програм-
мы будет происходить гораздо быстрее в режиме пассивного анализа.

     При работе в режиме пассивного анализа Turbo Profiler преры-
вает  процесс  выполнения  программы  через одинаковые промежутки
времени для сопоставления показания счетчика и адреса выполняемо-
го кода.  Если показание данного счетчика указывает на адрес, на-
ходящийся внутри проверяемого фрагмента  (помеченного  маркером),
то профилировщик увеличивает значение переменной в блоке подсчета
временной статистики для данного фрагмента.  Если показание счет-
чика  не указывает на адрес внутри какого-либо помеченного марке-
ром фрагмента (к примеру,  это значение может указывать на  адрес
прерывания DOS или вызова BIOS), то профилировщик игнорирует дан-
ный импульс таймера.

     Интерпретировать результаты пассивного анализа довольно-таки
трудно, за исключением тех случаев,  когда время выполнения прог-
раммы велико или когда вы накапливаете статистику о  времени  вы-
полнения при большом числе запусков программы. Некоторые фрагмен-
ты программы могут вообще не найти никакого отражения в статисти-
ческих данных несмотря на то, что в действительности они выполня-
ются.  Это происходит потому,  что прерывания  работы  программы,
производимые  профилировщиком,  просто  не совпадают по времени с
выполнением этих фрагментов. Для достижения большей точности ста-
тистических  данных  собирайте  статистику  в процессе нескольких
прогонов программы (убедитесь в том,  что установленное  значение
параметра  Run  Count  в  блоке диалога "Profiling Options" соот-
ветствует тому количеству прогонов программы,  которое вы  хотите
выполнить).

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

     Примечание: при пассивном анализе не происходит значительно-
                 го  увеличения  времени работы программы,  но за
                 это приходится платить некоторой неполнотой  по-
                 лученных результатов профилирования.

   Сравнительные особенности пассивного и активного анализа

     Некоторые данные,  полученные при работе в режиме пассивного
анализа, могут ввести вас в заблуждение, если при их рассмотрении
вы не будете учитывать следующие особенности:

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

   * Когда программа вызывает какое-либо прерывание,  не помечен-
     ное маркером фрагмента,  то профилировщик прибавляет  время,
     затрачиваемое на обработку прерывания, ко времени выполнения
     вызывающей подпрограммы в том случае, если анализ происходит
     в активном режиме; если же задан пассивный режим анализа, то
     это время просто игнорируется.

                        Общий анализ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Общий анализ позволяет вам осуществлять  проверку  структуры
программы и последовательность ее выполнения. Поскольку при общем
анализе выполнение программы не замедляется,  то вы можете в ходе
одного  сеанса профилирования выполнить две задачи.  Общий анализ
позволяет подсчитать  сколько  раз  выполнялся  какой-либо   блок
(установите    параметр    Maximum    Coverage   Count   в   меню
Statistics/Profiling Options).  Таким образом вы можете проверить
действительно  ли вызывался блок программы и одновременно опреде-
лить насколько часто происходило обращение к данному блоку.

              Ускорение процесса профилирования
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Каждый раз, когда управление программой передается какой-ли-
бо подпрограмме,  помеченной в качестве фрагмента,  для  которого
собирается  статистика,  система  Turbo Profiler должна выполнить
ряд определенных действий (составляющих так  называемую  "бухгал-
терскую  программу",  или  программу учета).  Скорость выполнения
программы в процессе получения ее профиля зависит  от  того,  как
часто управление передается на маркеры фрагментов, а также от ти-
па информации, собираемой профилировщиком для тех фрагментов, ко-
торые выполняются наиболее часто.  Чем более подробная информация
собирается (особенно это относится к информации о  вызовах),  тем
больше  времени  требуется профилировщику для выполнения "бухгал-
терской программы" в приложении к конкретному фрагменту.

     В некоторых случаях система Turbo Profiler  может  замедлить
работу программы до неприемлемого уровня. Такая ситуация возможна
в случае  частых  обращений программы к какой-либо подпрограмме с
высоким уровнем вложенности,  и если при этом для параметров, оп-
ределяющих  сбор информации о стеках вызовов всех помеченных мар-
кером фрагментов (All Areas),  установлено значение All  Callers.
Если вы пометите такую подпрограмму с высоким уровнем вложенности
в качестве фрагмента, то системе Turbo Profiler придется затрачи-
вать большое количество времени на отслеживание путей вызова этой
подпрограммы.

     Примечание: Даже  в  том  случае,  когда  при профилировании
                 программа выполняется медленнее,  все  временные
                 данные,   получаемые  системой  Turbo  Profiler,
                 соответствуют действительности.

     Для выявления  того,  часто  ли программа вызывает некоторую
подпрограмму,  находящуюся на низком уровне иерархии,  необходимо
переключиться  на работу с окном "Execution Profile" и отобразить
на экране количественную статистику выполнения  фрагментов.  (Для
этого  необходимо  вызвать  локальное  меню и установить значение
Counts для параметра Display). В результате на экране должна поя-
виться гистограмма,  отражающая,  сколько раз был выполнен каждый
из фрагментов (с упорядочением по количеству выполнений).

     Если одна  или  несколько  подпрограмм вызываются программой
гораздо чаще, чем все остальные, то вы можете заблокировать выда-
чу  на  экран статистической информации об этих подпрограммах при
помощи команды Filter/Current (Отфильтровать/Текущая)  локального
меню  окна  "Execution  Profile".  Также вы можете убрать маркеры
фрагментов,  установленные для данных подпрограмм, при помощи ко-
манды Remove (Удалить) из локальных меню окон "Module", "Areas" и
"Execution Profile".

          Повышение точности статистических данных
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если вам не удается собрать достаточного  количества  данных
(из-за того,  что программа работает слишком быстро и профилиров-
щик не успевает получить статистически значимую выборку) или соб-
ранные   данные   не   соответствуют  истинному  положению  вещей
(вследствие явления резонанса), то в такой ситуации вы не сможете
принять  обоснованное  решение о том,  какие изменения необходимо
внести в исходный текст программы. Давайте посмотрим, что же мож-
но предпринять в случае возникновения какой-либо из перечисленных
проблем.

                 Недостаточный объем данных

     Для повышения точности временных статистических данных и по-
лучения статистически значимых средних  характеристик  необходимо
произвести несколько запусков программы.  Убедитесь, что вы уста-
новили в блоке диалога "Profiling Options" соответствующее значе-
ние параметра Run Count. При каждом последующем запуске программы
(после  ее  завершения) профилировщик добавляет полученные в ходе
текущего сеанса временные данные к аналогичным данным,  собранным
во  время предыдущих прогонов программы.  Это продолжается до тех
пор,  пока число произведенных запусков программы не станет равно
значению параметра Run Count.

     Внимание!
     ДДДДДДДДД
     Прогнав программу определенное количество раз,  вы  получите
статистическую информацию,  которую можно использовать для после-
дующих запусков. Убедитесь, что вы сохранили (или проанализирова-
ли)  полученную  статистическую информацию перед последующими за-
пусками программы.

                          Резонанс

     Резонанс наступает,  например,  когда время выполнения цикла
равно времени прохождения тактовых импульсов.  Если причиной  не-
точности  статистических  данных является эффект резонанса,  то в
этом случае следует воспользоваться параметром Clock Speed в бло-
ке диалога "Profiling Options", позволяющим устанавливать частоту
работы таймера профилировщика в диапазоне от 18 до 1000 импульсов
в секунду. Необходимо выбрать такое число, которое бы не являлось
общим кратным или общим делителем резонансной частоты.  Например,
если  при  работе  таймера  с частотой 100 импульсов в секунду вы
наблюдаете  явление  резонанса,  то  можно  попробовать  изменить
частоту его работы на 70 или 130 импульсов в секунду.

     Примечание: Параметр  Clok  Speed устанавливается только при
                 работе в режиме пассивного анализа.

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

     Чем выше частота работы таймера,  тем точнее Turbo  Profiler
сможет определить, на что расходуется время выполнения программы.
Получите ли вы исключительно точные временные данные,  если зада-
дите частоту работы таймера,  равную 1000  импульсов  в  секунду?
Совсем необязательно. Чем выше частота, с которой таймер профили-
ровщика генерирует импульсы,  тем медленнее выполняется программа
(так как системе Turbo Profiler приходится выполнять определенные
операции сверки при каждом импульсе таймера).  Поэтому,  если  вы
хотите,  чтобы точность собираемой статистики была выше, чем тог-
да, когда частота работы таймера задается по умолчанию (она равна
100  импульсам в секунду),  необходимо увеличивать эту частоту до
тех пор, пока не будет достигнут допустимый компромисс между точ-
ностью данных и скоростью выполнения программы.

     Примечание: Изменение значения тактовой частоты таймера воз-
                 можно только в режиме пассивного профилирования;
                 при активном  режиме  генерируемые  импульсы  не
                 используются.

          Некоторые советы по поводу профилирования
               при оверлейной организации программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     К сожалению,   необходимость  периодически  загружать  части
программы с диска в оперативную память и выгружать их обратно  на
диск  влечет  за собой замедление работы программы вследствие вы-
полнения операций по доступу к диску. Так как даже высокоскорост-
ные диски являются самыми медленными запоминающими устройствами у
большинства персональных компьютеров, то несовершенное управление
оверлеями может катастрофически понизить производительность.  Си-
туация осложняется еще и тем, что подпрограмма обработки оверлеев
в откомпилированной программе, как правило, недоступна для изуче-
ния.  Turbo Profiler вскрывает механизм управления оверлеями, что
позволяет вам регулировать их использование.

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

     В окне профилировщика "Overlays" отображаются следующие ста-
тистические данные:

   * Количество загрузок с диска каждого из оверлеев

   * Упорядоченная по времени последовательность загрузки оверле-
     ев программой.

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

     Располагая информацией о последовательности загрузки оверле-
ев,  вы можете выбрать оптимальные алгоритмы для управления буфе-
ром  оверлеев.  Изучив список оверлеев и просмотрев,  когда и как
часто загружался каждый из них,  вы сможете сделать вывод о  том,
какие  из  модулей  основной программы могут работать лучше в ка-
честве оверлеев, а какие оверлеи выгоднее сделать частью основной
программы.

      Профилирование объектно-ориентированных программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

  ИНТЕРПРЕТАЦИЯ И ИСПОЛЬЗОВАНИЕ РЕЗУЛЬТАТОВ ПРОФИЛИРОВАНИЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Итак, вы решили, какие статистические данные необходимо соб-
рать в процессе профилирования; в соответствии с этим вы произве-
ли настройку своей программы и выполнили ее столько раз,  сколько
необходимо для получения статистически значимого (или даже исчер-
пывающе полного) набора данных. Что же следует за этим?

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

                Анализ данных профилирования
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Окна системы Turbo Profiler, используемые для изучения полу-
ченной  статистики,  делятся  на два вида:  окна исходного текста
программы и окна отчета о профилировании.

     К окнам  исходного  текста  относятся следующие окна системы
Turbo Profiler:  "Module", "Areas", "Routines" ("Подпрограммы") и
"Disassembly (CPU)" ("Дисассемблер (ЦПУ)").  Перед началом профи-
лирования вы в основном пользуетесь окнами исходного  текста  для
того,  чтобы  установить  фрагменты в программе и задать действия
профилировщика по сбору статистических данных для каждого из этих
фрагментов.  После  ознакомления  со  статистикой  профилирования
(отображаемой в одном или нескольких окнах отчета) вы снова возв-
ращаетесь к работе с окнами исходного текста для того, чтобы про-
анализировать исходный текст своей программы.

     Окнами отчета системы Turbo Profiler являются следующие  ок-
на:  "Execution Profile",  "Callers",  "Overlays",  "Interrupts",
"Files" и "Сoverage".  Окна отчета служат  для  отображения  ста-
тистических данных, полученных в ходе сеанса профилирования прог-
раммы, что позволяет оценить полученные данные и определить,  ка-
кие сегменты в исходном тексте необходимо изменить для того, что-
бы повысить производительность программы.

       Окно "Execution Profile" ("Профиль выполнения")

     В процессе  совершенствования  программы  основное  внимание
следует уделять информации, находящейся в данном окне. Как прави-
ло,  у вас возникает желание изучить те строки программы,  на вы-
полнение которых тратится большая часть времени ее работы.  Затем
обратите внимание на то,  какие из строк (или подпрограмм) харак-
теризуются высоким показателем  отношения  времени  выполнения  к
числу  выполнений.  И,  наконец,  имеет смысл внимательно изучить
подпрограммы с наибольшим средним временем,  затраченным на обра-
ботку каждого вызова.

         Окно "Callers" ("Вызывающие подпрограммы")

     Как только вы выделили подпрограмму,  которую хотите усовер-
шенствовать,   используйте   информацию,   находящуюся   в   окне
"Callers", для определения местонахождения  всех  тех  фрагментов
программы, которые осуществляют вызов рассматриваемой подпрограм-
мы. В окне "Callers" отображаются данные о том, сколько раз вызы-
валась рассматриваемая подпрограмма и источник вызова (вызывающая
подпрограмма).

                 Окно "Overlays" ("Оверлеи")

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

              Окно "Interrupts" ("Прерывания")

     В окне "Interrupts" отображены все (указанные) случаи преры-
ваний, вызванных  программой,  что может подсказать необходимость
объединения вывода на экран информации о нескольких строках прог-
раммы.  А в случае работы с программами,  интенсивно обменивающи-
мися данными с дисковыми файлами, вы можете прийти к заключению о
целесообразности буферизации операций ввода-вывода на диске.

                   Окно "Files" ("Файлы")

     В окне "Files" содержится оперативно предоставляемая  инфор-
мация о количестве операций чтения из файла и записи в файл,  вы-
полняемых программой.  Если прикладные программы ориентированы на
интенсивные процессы ввода-вывода, то данные, отображаемые в этом
окне,  позволят выявить, на работу с какими из файлов следует об-
ратить особое внимание.

              Окно "Coverage" ("Общий анализ")

     Окно "Coverage", при значении параметров, устанавливаемых по
умолчанию,  отображает  блоки программ,  которые не выполнялись в
ходе сеанса профилирования.  Это окно  помогает  вам  изолировать
участки  программы,  которые  не были вызваны (пассивный код),  и
фрагменты,  которые следует вызвать.  Кроме того, окно "Coverаge"
можно настроить таким образом, что оно будет отображать количест-
во обращений к каждому блоку программы в ходе ее прогона.

                Фильтрация полученных данных
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Команды локального меню окон системы Turbo Profiler позволя-
ют осуществлять временную или постоянную фильтрацию данных, выда-
ваемых в текущий момент на экран дисплея. Ниже в таблице приведе-
ны  команды,  используемые системой Turbo Profiler для фильтрации
статистических данных.

      Таблица 3.2.  Команды локального меню,  предназначенные для
                   фильтрации собранных статистических данных
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Окно           Команда локального  Действие команды
               меню
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

"Execution  Filter            Либо временно  удаляет   с   экрана
Profile"    (Отфильтровать)   статистику, характеризующую текущий
                              фрагмент, либо вызывает отображение
                              статистики, относящейся   только  к
                              текущему модулю,               либо
                              восстанавливает в       окне    все
                              полученные статистические   данные.
                              (Из меню  Filter   выберите   опции
                              Current (Текущий),  Module (Модуль)
                              или All (Все)).

            Remove            Удаляет   из   полученного   набора
            (Удалить)         статистических     данных       без
                              возможности            последующего
                              восстановления  те из них,  которые
                              относятся   к   текущему  фрагменту.
                              Будьте внимательны              при
                              использовании  этой команды!
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

"Files"     Collection        В положении   Disabled     отменяет
            (Сбор)            сбор  статистической  информации  о
            (верхняя панель)  файлах.

            Detail            В положении  Disabled      приводит
            (Уровень          только  к отображению   операций по
            детализации)      раскрытию и   закрытию  файлов,   в
            (верхняя панель)  положении Enabled добавляется  учет
                              операций чтения и записи.

            Display           Отображает  каждое  из  учитываемых
            (Отобразить)      событий  либо в качестве   элемента
            (нижняя панель)   гистограммы,  либо в текстовом виде
                              с  показом точного времени начала и
                              продолжительности данного  события.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

"Interrupts"   Remove         Убирает  информацию  о выбранном  в
               (Удалить)      данный  момент прерывании с верхней
               (верхняя       панели.
               панель)

               Display        Отображает         статистику     о
               (Отобразить)   прерываниях   либо  в   виде    (1)
               (нижняя        суммарных  гистограмм,   в  которых
               панель)        учитываются  вызовы     прерываний,
                              время,  затрачиваемое      на   эти
                              обращения,  или    и  те,  и другие
                              вместе  взятые данные,  либо (2)  в
                              виде  подробного           перечня,
                              отображающего    последовательность
                              событий.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

"Overlays"  Display           Отображает   данные профилирования,
                              полученные  для     каждого      из
                              оверлеев,  либо  (1) в соответствии
                              с  параметром    Count   (Подсчет),
                              когда учитывается    общий    объем
                              использованной памяти  и количество
                              загрузок, либо (2) в соответствии с
                              параметром History   (Предыстория),
                              когда дается   подробное   описание
                              последовательности событий       со
                              строкой сведений для каждого случая
                              загрузки оверлеев.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

"Coverage"  Display menu
            (меню Display)
            (правая панель)

            Display           Определяет набор:
            (Отображение)     (1) отображение всех блоков;
                              (2) отображение только тех  блоков,
                                  к которым не было обращения.

            Sort              Определяет    порядок   отображения
            (Сортировка)      блоков (или   по    адресу   или по
                              количеству обращений).

            Group
            (Группирование)   Устанавливает    метод  отображения
                              блоков:
                              (1) отображение всех блоков;
                              (2) группирование    блоков  внутри
                                  подпрограмм;
                              (3) группирование   блоков   внутри
                                  модуля.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При выборе команды Remove из локального меню окна "Execution
Profile" для того, чтобы убрать статистические данные, характери-
зующие какой-либо из фрагментов (без возможности их  последующего
восстановления), профилировщик выполняет следующие действия:

   * Корректирует отчет о профилировании,  вычитая из общего вре-
     мени то время,  которое затрачивается на выполнение  данного
     фрагмента

   * Корректирует  процентное выражение времени выполнения остав-
     шихся фрагментов путем подсчета того,  сколько процентов оно
     составляет  от  скорректированного общего времени выполнения
     программы:

     <скорректированное общее время> = <общее время  профилирова-
     ния> - - <время выполнения исключенного фрагмента>

   * Удаляет маркер,  установленный для данного фрагмента, в окне
     "Module"

   * Удаляет данный фрагмент из списка фрагментов,  отображаемого
     в окне "Areas"

     Обратите внимание на то,  что при удалении фрагмента из окна
"Execution Profile" статистические данные для оставшихся фрагмен-
тов  будут  перерассчитаны только для текущего прогона.  Наиболее
вероятно,  что при последующем прогоне программы  временная  ста-
тистика, характеризующая удаленный из окна фрагмент, будет учтена
во временной статистике одного или нескольких других  фрагментов.
Для того,  чтобы полностью исключить фрагмент и удалить из общего
набора статистики временную статистику его выполнения, переведите
данный фрагмент в режим Disable. Не забудьте установить режим во-
зобновления сбора статистических данных Enable  для  последующего
фрагмента.

                    Доработка программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Приведем общую  схему поиска подпрограмм,  в которых простые
изменения,  внесенные в управляющие конструкции, могут привести к
улучшению рабочих характеристик программы/:

  1. Выявите большие подпрограммы,  характеризуемые несоразмерным
     временем выполнения,  или подпрограммы,  которые  вызываются
     большое количество раз. Начав с самого верхнего уровня прог-
     раммы,  проследите передачу управления  на  все  последующие
     уровни,  пытаясь найти те участки программы, в которых можно
     улучшить ее работу за счет уменьшения или устранения  излиш-
     них вызовов и ненужных операций.

  2. Выявите операторы и подпрограммы,  для которых велико значе-
     ние отношения общего времени их выполнения к количеству  вы-
     полнений этих операторов и подпрограмм.  Установите значение
     Both или Рer Call для параметра Display в локальном меню ок-
     на "Execution Profile". Затем посмотрите, для каких фрагмен-
     тов строка гистограммы, отражающая время работы, имеет боль-
     шую длину,  а строка,  соответствующая числу вызовов,  мала.
     Обычно такими свойствами  обладают  неэффективно  работающие
     операторы и подпрограммы. Перепишите их таким образом, чтобы
     тот же самый результат достигался более  эффективным  спосо-
     бом.

  3. И в качестве последнего средства предлагается заняться опти-
     мизацией циклов наибольшего  уровня  вложенности.  При  этом
     можно воспользоваться следующими приемами:

     * Развертка циклов

     * Помещение  в  кэш  временных результатов,  вычисляемых при
       каждой итерации

     * Вынос вычислений, для которых результаты не изменяются, за
       пределы циклов

     * Кодирование циклов на языке ассемблера

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

     Кроме использования  вышеперечисленных советов общего харак-
тера для повышения производительности программ можно  производить
следующие специфические действия:

   * Модифицировать структуры данных и алгоритмы

   * Сохранять в памяти заранее вычисленные результаты

   * Помещать в кэш часто используемые данные

   * Оценивать данные только по мере необходимости

   * Оптимизировать циклы, процедуры и выражения

                 Изменение структур данных

     Попробуйте использовать  более  усложненные  алгоритмы   или
структуры данных.  Например, как правило, для произвольно распре-
деленных  ключевых  значений  подпрограмма  "QuickSort"  работает
быстрее, чем алгоритм, реализующий сортировку методом пузырька. С
другими примерами вы можете ознакомиться, просмотрев соответству-
ющую литературу по структурам данных и алгоритмам.

     Для того, чтобы вычисления производились более быстро, необ-
ходимо использовать целые числа вместо вещественных,  как, напри-
мер, в случае обработки окон и строк в подпрограммах ввода/вывода
на экран и подпрограммах обработки графических данных. Используй-
те  для  манипуляции данными длинные целые числа или какие-нибудь
другие значения, не требующие точности чисел с плавающей точкой.

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

         Сохранение заранее вычисленных результатов

     Если программа вычисляет одни и те же значения неоднократно,
лучше  вычислять  их  заранее и запоминать,  а затем осуществлять
доступ к ним как к элементам таблицы. Например, постройте таблицу
синусов,  а затем извлекайте из нее требуемое значение, используя
величину угла как индекс таблицы.

          Помещение в кэш часто используемых данных

     Язык Си  выполняет буферизацию физического ввода символов на
низком уровне.  Функция "getc" считывает с диска  в  буфер  целый
сектор,  но возвращает только лишь первый символ из этого буфера.
Последующий вызов функции "getc" возвращает следующий  из  симво-
лов,  находящихся в буфере, и так происходит до тех пор, пока бу-
фер не будет исчерпан.  После этого функция  "getc"  считывает  с
диска следующий сектор. В языке Паскаль аналогичным образом рабо-
тает подпрограмма "Read".

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

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

        Оценка значений только по мере необходимости

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

     При работе со справочными таблицами большой размерности оце-
нивайте элементы этих таблиц только тогда,  когда они вам необхо-
димы,  и для хранения уже вычисленных значений используйте допол-
нительный массив.

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

         Оптимизация существующего текста программы

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

                            Циклы

     * При каждой возможности выносите вычисления за пределы цик-
       лов.  Повторные вычисления внутри цикла одного и  того  же
       значения  не  являются  необходимыми  и к тому же отнимают
       время.
     * Запоминайте результаты вычислений,  требующих больших зат-
       рат времени.

       Например, в  случае работы с массивами в подпрограмме сор-
       тировки методом вставки нет необходимости  менять  местами
       попарно  все элементы.  Если вы сохраните значение первого
       элемента,  то внутренний цикл лишь будет  должен  сдвигать
       каждый последующий элемент до тех пор,  пока он (этот эле-
       мент) не станет меньше исходного (первого  элемента).  При
       завершении цикла в текущую позицию помещается тот элемент,
       который был сохранен. Эта процедура заменяет дорогостоящие
       операции  попарной  перестановки каждого элемента массива,
       используемые в традиционном алгоритме  сортировки  методом
       вставки.
     * Если  в  двух циклах выполняются одни и те же операции над
       одинаковыми наборами данных,  то  следует  объединить  эти
       циклы в один.

     * По возможности заменяйте два или больше выражений,  прове-
       ряющих условие окончания цикла, на одно.

       Например, можно добавить в массив дополнительный элемент и
       присвоить ему некоторое специальное значение, которое ука-
       зывает на завершение цикла.  (Именно таким образом в языке
       С обрабатываются текстовые строки).

     * Осуществляйте развертку циклов (иначе, не используйте цик-
       лы с небольшим числом проходов).

       Например, выражение вида:
           for (x = 0; x < 4; x++)
              y += items[x];

       можно заменить на:
           y += items[0] + items[1] + items[2] + items[3];

                        Подпрограммы

     * Оформите   наиболее   часто  вызываемые  подпрограммы  как
       подставляемые или замените их  определения  подставляемыми
       макроопределениями.

     * Используйте  сопрограммы для реализации многопроходных ал-
       горитмов обработки больших файлов.  (Ознакомьтесь с  подп-
       рограммами "setjmp" и "longjmp" языка С). (В языке Паскаль
       ознакомьтесь с типами  процедур,  которые  позволят  обра-
       щаться  с  подпрограммами  и функциями как с переменными с
       целью выполнения сопрограмм).

     * Перепишите рекурсивные подпрограммы таким  образом,  чтобы
       они использовали стек данных,  управление которым осущест-
       вляется явным образом.

                          Выражения

     * Используйте инициализацию переменных на этапе компиляции.

     * При одном вызове функции одновременно возвращайте несколь-
       ко результатов.

       Например, напишите подпрограммы, одновременно возвращающие
       значения синуса/косинуса,  частного/остатка или пары коор-
       динат Х-Y экрана.

     * Заменяйте доступ по индексу массива на доступ  при  помощи
       указателя.

                           РЕЗЮМЕ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В следующей главе мы детально опишем, как Turbo Profiler на-
капливает статистику,  как влияют маркеры фрагментов на сбор дан-
ных,  где вычисляется временная и количественная статистика и как
Turbo Profiler отслеживает вызовы подпрограмм.

        ГЛАВА 4. МЕХАНИЗМ РАБОТЫ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для того,  чтобы использовать систему Turbo Profiler с  наи-
большей отдачей, вам необходимо понять внутренний механизм ее ра-
боты. Знание того, каким образом действует профилировщик, обнару-
жив маркер фрагмента,  или того, что происходит каждый раз, когда
система прерывает  выполнение  программы,  позволит  вам  усовер-
шенствовать методику,  предназначенную как для определения инфор-
мации,  которую вам необходимо получить, так и для анализа итого-
вых отчетов.

     Рассмотрим исходные тексты программ PTOLL и PTOLLPAS:

/* ****** PTOLL.C ***** */

#include 
#include 

void main()
{
    printf("Entering main\n");
    route66();
    printf("Back in main\n");
    delay(1000);
    highway80();
    printf("Back in main\n");
    delay(1000);
    printf("Leaving main\n\n");
}

route66()
{
    printf("Entering Route 66\n");
    delay(2000);
    printf("Leaving  Route 66\n");
}

highway80()
{
    printf("Entering Highway 80\n");
    delay(2000);
    printf("Leaving Highway 80\n");
}

{******  PTOLLPAS.PAS  ******}

Uses Crt;

procedure Route66;
begin
  Writeln( 'Entering Route 66' );
  Delay(2000);
  Writeln( 'Leaving  Route 66' );
end;

procedure Highway80;
begin
  Writeln( 'Entering Highway 80' );
  Delay(2000);
  Writeln( 'Leaving  Highway 80' );
end;

begin
  Writeln( 'Entering main' );
  Route66;
  Writeln( 'back in main' );
  Delay(1000);
  Highway80;
  Writeln( 'back in main' );
  Delay(100);
  Writeln( 'Leaving main' );
end.

     Если в качестве фрагментов определить все подпрограммы, вхо-
дящие в рассмотренный выше модуль,  а это можно сделать с помощью
команды All Routines in Module (Все подпрограммы  в  модуле),  то
образуются  четыре блока подсчета времени и четыре блока подсчета
количества вызовов подпрограмм.

                  Время выполнения             Количество вызовов

  Total              ЪДД=====ДДї                   ЪДД=====ДДї
  (итоговое          АДД=====ДДЩ                   АДД=====ДДЩ
   значение)

  main()             ЪДД=====ДДї                   ЪДД=====ДДї
  (главная           АДД=====ДДЩ                   АДД=====ДДЩ
   дорога)

  route66()          ЪДД=====ДДї                   ЪДД=====ДДї
  (дорога N% 66)     АДД=====ДДЩ                   АДД=====ДДЩ

  hihgway80()        ЪДД=====ДДї                   ЪДД=====ДДї
  (автострада N% 80) АДД=====ДДЩ                   АДД=====ДДЩ

         Рис. 4.1. Блоки подсчета времени выполнения и количества
                  вызовов подпрограмм для программ PTOLL/PTOLLPAS

                        ГРАНИЦЫ ФРАГМЕНТОВ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Перед проездом первого такого пункта вы будете двигаться  по
"свободному" (неоплачиваемому) участку дороги.  Затем, после про-
езда первого пункта,  время, затраченное на проезд каждого после-
дующего участка дороги,  будет отслеживаться тем пунктом, который
контролирует данный конкретный участок дороги. Но рассматриваемая
автострада  обладает  одной  особенностью,  которая заключается в
том,  что двигаться по дороге вы можете только в одном  направле-
нии:  циклы и переходы подобны пневматическим подъемникам,  с по-
мощью которых вы "перебрасываетесь" на какой-либо из ранее  прой-
денных участков дороги.

         Сбор временной и количественной статистики
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Перед тем,  как вы попадете в основной программный блок, бу-
дет выполнен загрузочный код языка Си (или Паскаль). Это еще пока
ничейная территория.  Каждый импульс таймера, выдаваемый во время
прохождения данного участка,  не принимается во внимание, за иск-
лючением  того случая,  когда вы явно помечаете фрагмент в загру-
зочном коде.

     Как только будет пройден маркер фрагмента (пункт сбора  пош-
лины),  которым помечена подпрограмма "main",  переменная в блоке
подсчета числа вызовов указанной подпрограммы увеличится на  еди-
ницу.  Каждый импульс таймера, выдаваемый с момента входа в подп-
рограмму "main" до вызова подпрограммы "route66",  обрабатывается
в блоке подсчета времени выполнения подпрограммы "main".

     Далее подпрограмма "main" вызывает подпрограмму "route66", и
вы попадаете на новый отрезок автострады.  В момент "прохождения"
маркера фрагмента (пункта сбора пошлины),  которым помечена подп-
рограмма "route66", происходит следующее:

   * В качестве текущего фрагмента устанавливается "route66".

   * Пересылаются  в  стек  накопленные в блоках подсчета данные,
     характеризующие вызывающую подпрограмму (в данном  случае  -
     подпрограмму "main").

   * Значение  переменной  в  блоке  подсчета  количества вызовов
     подпрограммы "route66" увеличивается на единицу.

     Каждый импульс таймера, выдаваемый начиная с данного момента
и до возврата из подпрограммы "route66", автоматически увеличива-
ет значение переменной в блоке подсчета времени выполнения  подп-
рограммы "route66". При этом переменная в блоке учета общего вре-
мени выполнения программы также продолжает увеличиваться с каждым
импульсом таймера.

     Как только в процессе выполнения программы достигается точка
возврата из подпрограммы "route66",  профилировщик  извлекает  из
стека данные,  характеризующие вызывающую подпрограмму.  Значение
переменной,  характеризующей количество  обращений  к  вызывающей
подпрограмме, в этот момент не изменяется. Однако, каждый импульс
таймера,  выдаваемый с этого момента и до момента вызова подпрог-
раммы "highway80", вносит изменения в значение переменной (добав-
ляется к этому значению)  в  блоке  подсчета  времени  выполнения
подпрограммы "main",  а также в значение переменной в блоке учета
общего времени выполнения всей программы.  Для того, чтобы прове-
рить этот факт, уберите маркер фрагмента, установленный для подп-
рограммы "route66" (для этого установите курсор на маркере  подп-
рограммы "route66" и нажмите клавишу {F2}), и сравните полученные
данные c предыдущими результатами  профилирования  (когда  маркер
для  этой подпрограммы был установлен).  Вы должны заметить,  что
общее время выполнения осталось тем же.  Однако, время выполнения
подпрограммы "main" должно увеличиться как раз на столько, сколь-
ко его раньше требовалось для выполнения подпрограммы "route66".

        Определение затрат времени на вызов подпрограмм
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     У вас может возникнуть  желание  определить  время,  которое
тратится  непосредственно на вызов подпрограммы (например,  подп-
рограммы "route66") без учета времени выполнения  самой  подпрог-
раммы.  Самый  простой способ для этого - воспрепятствовать сбору
статистических данных на входе в подпрограмму "route66"  и  затем
возобновить сбор этих данных сразу же после возврата из нее.  (Вы
также можете получить информацию такого рода при работе в  режиме
пассивного анализа, который описывается в главе 3).

     Чтобы воспрепятствовать  сбору  статистики  для подпрограммы
"route66",  поместите курсор в начале исходного  текста  функции.
Затем выберите команду Operation (Работа) из локального меню окна
"Module" для того, чтобы раскрыть блок диалога "Area Operations",
и  установите  для  параметра  Operation значение Disable (Отклю-
чить).

     Когда на входе в подпрограмму "route66" вы аннулируете  сбор
данных,  то  при возврате из этой подпрограммы сбор статистики не
возобновляется автоматически.  Вы должны установить маркер  фраг-
мента  в  месте  расположения правой фигурной скобки подпрограммы
"route66" и в блоке диалога "Area  Operations"  снова  установить
для параметра Operation значение Enable (Включить),  чтобы разре-
шить сбор информации для данного помеченного маркером фрагмента.

                  Затраты на выполнение циклов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Уяснив эту  особенность,  ознакомьтесь  с  текстом следующей
     программы:

  /* ****** PLOST.C ****** */

  #include 
  #include 
  lost_in_town();

=>void main()
  {
     printf("Entering main\n");
     lost_in_town();
     delay(1000);
     printf("Leaving main\n\n");
     delay(1000);
  }

=>lost_in_town()
  {
     int i;
     printf("Looking for highway...\n");
     delay(100);
     for (i=0; i<10; i++)
     {
        printf("Ask for directions\n");
=>      printf("Wrong turn\n\n");
        delay(1000);
     }
     printf("On the road again\n");
  }

   {****** PLOSTPAS.PAS ******}
   uses Crt;

=> procedure Lost_in_town;
   var
     I : Integer;
   begin
     Writeln( 'Looking for highway...' );
     Delay(100);
     for I := 0 to 9 do
     begin
       Writeln( 'Ask for directions' );
=>     Writeln( 'Wrong turn' );
       Writeln;
       Delay(1000);
     end;
     Writeln( 'on the road again' );
   end;

=> begin
     Writeln( 'Entering Main' );
     Lost_in_town;
     Delay(1000);
     Writeln( 'Leaving main' );
     Writeln;
     Delay(1000);
   end.

     В программе  plost  мы усложнили подпрограмму "lost_in_town"
за счет использования составного оператора внутри цикла.  Предпо-
ложим,  что  были установлены три маркера:  один для подпрограммы
"main",  другой - для "lost_in_town" и еще один маркер  -  маркер
строки - для оператора печати сообщения "Wrong turn".

     После того,  как вы попадаете в подпрограмму "lost_in_town",
начинают происходить странные вещи.  Когда вы впервые  входите  в
подпрограмму,  "lost_in_town" становится текущим фрагментом. Вре-
мя,  относящееся к распечатке сообщения  "Looking  for  highway",
ассоциируется с этим маркером.

     Время, затрачиваемое на выполнение оператора цикла, по-преж-
нему ассоциируется с маркером подпрограммы,  и когда в первый раз
выполняется оператор печати сообщения "Ask for directions", время
все еще ассоциируется с маркером подпрограммы.  Однако, стоит вам
пройти маркер строки для оператора печати сообщения "Wrong turn",
все оставшееся время работы подпрограммы будет ассоциироваться  с
данным маркером.

     Тот факт, что вы попадаете на участок программы, который ра-
нее ассоциировался с другим маркером, вовсе не означает смены те-
кущего фрагмента.  Текущий фрагмент меняется только в том случае,
если вы проходите непосредственно через маркер фрагмента. Это мо-
жет привести к довольно неожиданным результатам.

     Например, если вы установили три маркера для программы plost
так,  как это было описано выше (по одному  маркеру  для  функции
"main",  функции  "lost_in_town"  и  оператора  печати  сообщения
"Wrong Turn"),  то приблизительно 84%  общего времени  выполнения
программы  будет ассоциироваться с печатью сообщения "Wrong turn"
и   только   1%   времени   выполнения   будет   отводиться    на
"lost_in_town". Это происходит потому, что девять из десяти обра-
щений к оператору печати сообщения "Ask for directions",  а также
все  обращения  к последующим операторам "delay" происходят после
прохождения маркера оператора печати сообщения "Wrong Turn".

     Если вы уберете маркер фрагмента,  которым помечен  оператор
печати сообщения "Wrong Turn",  то 84%  оставшегося времени будет
затрачено на выполнение подпрограммы "lost_in_town".

     Теперь рассмотрим следующий текст программы:

  main
  {
     while(!kbhit() )
     {
        func1();
        statement1;
        statement2;
        func2();
      }
  }

  func1()
  {
  }
  func2()
  {
  }

     Предположим, что  маркеры  фрагментов  установлены  для всех
подпрограмм в модуле таким образом,  что каждое из имен  подпрог-
рамм  -  "main",  "func1"  и "func2" - соответствует началу соот-
ветствующего фрагмента.  Вы входите в подпрограмму "main"  и  тут
встречаете  маркер данного фрагмента.  Это засчитывается системой
Turbo Profiler как точка прерывания. При этом устанавливается пе-
ременная,  указывающая  на то,  что до момента прохождения другой
точки прерывания текущим фрагментом будет  являться  подпрограмма
"main". Кроме того, увеличивается на единицу значение переменной,
отображающей количество вызовов подпрограммы "main".

     Контекст этих фрагментов  не  является  жестко  определенным
лексически,  а  носит  динамический характер.  Это означает,  что
подпрограмма "main" будет являться текущим фрагментом до  момента
вызова подпрограммы "func1".  С момента входа в "func1" вы будете
находиться в новом фрагменте, и вы будете оставаться в нем до тех
пор, пока не произойдет вызов другой функции или пока вы не возв-
ратитесь из "func1".  Вышесказанное означает,  что  профилировщик
помещает  вызывающую  подпрограмму  (в данном случае подпрограмму
"main") в стек.

     При выходе из подпрограммы "func1" вы проходите маркер возв-
рата,  который  был  установлен  профилировщиком в момент входа в
"func1". Текущим фрагментом снова становится подпрограмма "main".
Каждый импульс таймера,  выдаваемый во время выполнения оператора
"statement1" или "statement2",  вносит изменения во временные ха-
рактеристики для того фрагмента, который ассоциируется с подпрог-
раммой "main".

     Здесь следует отметить две особенности :

  1. Каждый раз, когда вы попадаете в какой-либо фрагмент, профи-
     лировщик  вызывает  встроенную  подпрограмму,  которая соот-
     ветствующим образом изменяет значение переменных и обновляет
     содержимое стека вызова подпрограмм.  Каждый фрагмент харак-
     теризуется значением двух переменных,  одна из которых отра-
     жает количество обращений к фрагменту,  а другая - время его
     выполнения.  Каждый раз в момент входа в конкретный фрагмент
     возрастает значение переменной,  отображающей количество об-
     ращений к данному фрагменту.

  2. При каждом импульсе таймера  профилировщик  вызывает  другую
     встроенную подпрограмму,  которая проверяет,  какой из фраг-
     ментов является текущим,  и затем увеличивает значение пере-
     менной,  отображающей  временные  характеристики  выполнения
     рассматриваемого фрагмента, на соответствующую величину.

     Когда выполнение  программы  заканчивается,  система   Turbo
Profiler  преобразует  значения  переменных  "counts" для каждого
фрагмента в реальное время (на основе общего количества импульсов
таймера, выданных при выполнении всей программы).

      Ситуация при наличии нескольких операторов возврата
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     А как быть при наличии нескольких операторов "return"? Ответ
на этот вопрос связан с использованием неявных точек  возврата  в
конце подпрограмм.

  Что необходимо помнить в связи с использованием точек возврата:

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

тмена сбора статистических данных для часто вызываемых функций
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Например, если вам не нужно время, затраченное на выполнение
"func1",  установите  маркер  отмены  сбора  статистики  в начале
исходного текста этой функции.  Затем пометьте маркером возобнов-
ления сбора статистики оператор возврата из "func1". Для этого:

     1. Вызовите окно "Disassembly" (используйте для этого коман-
        ду View/Disassembly).

     2. Пометьте маркером фрагмента оператор "ret" функции.

     3. Перейдите в окно "Areas" меню View.

     4. Установите для параметров значение  Enable  (Возобновить)
        (нажмите клавиши {Ctrl}{O} и {E}).

     Теперь, при любом вызове "func1" сбор статистики будет отме-
няться в точке входа в функцию и возобновляться - при  выходе  из
этой функции.

     Более простым,  однако  менее  точным способом возобновления
сбора статистики будет являться установка маркера фрагмента с па-
раметром  возобновления  сбора данных в месте расположения правой
фигурной скобки в  конце  функции.  Однако,  недостатком  данного
способа является то,  что при этом собирается информация о време-
ни, затрачиваемом на выход из функции.

               РЕГИСТРАЦИЯ ВЫЗОВОВ ПОДПРОГРАММ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Активной подпрограммой называется подпрограмма,  находящаяся
в текущий момент времени в стеке вызовов подпрограмм, формируемом
профилировщиком.  В  режиме  активного  анализа   система   Turbo
Profiler  поддерживает свой собственный стек вызовов подпрограмм.
Этот стек аналогичен стеку вызовов любой  программы  DOS.  Однако
стек,  формируемый профилировщиком,  независим от стека пользова-
тельской программы и используется  исключительно  для  сохранения
информации  о вызовах подпрограмм,  в которых еще не был выполнен
оператор возврата.

     Для того,  чтобы поддерживать стек вызовов активных подпрог-
рамм,  в  системе  Turbo  Profiler используются два типа маркеров
фрагмента:

*    Маркеры  входа в подпрограмму (маркеры подпрограммы);
*    Обычные маркеры фрагмента (маркеры типа метка).

     Когда профилировщик  встречает  маркер входа в подпрограмму,
он помещает активную на  данный  момент  подпрограмму  (последний
встретившийся  маркер  входа  в  подпрограмму) в свой собственный
стек активных подпрограмм. Новый встретившийся маркер подпрограм-
мы становится маркером активной подпрограммы.

     Если теперь  будет пройден обычный маркер фрагмента,  то это
никак не повлияет на текущую подпрограмму или  на  стек  активных
подпрограмм. Прохождение обычного маркера означает лишь смену ак-
тивного фрагмента;  это подразумевает,  что  предыдущий  активный
фрагмент профилировщик исключает из рассмотрения.  Однако текущая
активная подпрограмма остается в стеке до тех пор,  пока профили-
ровщик не встретит оператор возврата.

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

     Таким образом профилировщик может прослеживать полную инфор-
мацию  о  последовательности  вызовов  каждой помеченной маркером
подпрограммы.  Если  вы  установили  параметр  Statistics/Callers
(Статистика/Вызывающие подпрограммы) для всех помеченных маркером
подпрограмм в положение Enabled,  то каждый раз  при  прохождении
маркера  входа  в  подпрограмму профилировщик полностью сохраняет
свой стек вызовов в буфере,  связанном непосредственно с маркером
входа в подпрограмму.

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

     Работа профилировщика со стеком активных подпрограмм опреде-
ляется значениями трех параметров, устанавливаемых при помощи ме-
ню:

   * Параметр Statistics/Callers (может быть установлено значение
     Enabled или Disabled).

   * Параметр Callers - устанавливается в локальном меню Option в
     окне "Areas" ("Фрагменты").

   * Параметр  Stack - устанавливается в локальном меню Callers в
     окне "Module".

     Хотя все параметры устанавливаются для  вызывающих  подпрог-
рамм, более гибкие возможности для контроля регистрации путей вы-
зова вы  получаете  при  использовании  локального  меню  в  окне
"Module".  В  этом  меню вы можете установить для параметра Areas
значения,  позволяющие регистрировать вызывающие подпрограммы для
одной подпрограммы, для всех подпрограмм в одном конкретном моду-
ле или для всех подпрограмм в программе.  Вместе с  тем,  команда
Stack  позволяет  задать  одно  из  следующих  значений параметра
Callers:  Аll Callers (Все  вызывающие  подпрограммы),  Immediate
Caller  (Непосредственно вызывающая подпрограмма) или None (Ника-
кие).

   * Выбор значения All Callers означает сохранение  всего  стека
     вызовов подпрограммы каждый раз,  когда в процессе ее выпол-
     нения встречается точка входа в подпрограмму.

   * Выбор значения Immediate Caller означает запоминание  только
     самого  последнего элемента стека вызовов подпрограммы в тот
     момент, когда встречается точка входа в подпрограмму.

   * Выбор значения None означает,  что при  прохождении  маркера
     входа  в  подпрограмму  никакая  информация  в стеке вызовов
     подпрограмм не запоминается.

     По умолчанию, при первом сеансе профилирования программы па-
раметр  Callers для всех маркеров входа в подпрограмму устанавли-
вается в положение None.

     Установка в главном меню  для  параметра  Statistics/Callers
значения  Enabled  аналогична установке для каждого маркера фраг-
мента,  указанного в окне "Areas", параметра Callers/All Callers.
Тем не менее, если вы вручную установите в окне "Areas" какое-ли-
бо из значений параметра Callers,  то в этом случае установка для
параметра  Statistics/Callers значения Enabled не вызовет измене-
ния значений параметра Callers ни для одного из фрагментов .

     Установка для параметра Statistics/Callers значения Disabled
в данной точке программы указывает профилировщику на то, чтобы он
не сохранял никакой информации в стеке вызовов, но это совершенно
не  влияет  на  значения параметра Callers,  установленные в окне
"Areas" (как и на значение параметра Statistics/Callers).

                ДИСКРЕТИЗАЦИЯ ВМЕСТО ПОДСЧЕТА
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Примечание: Все вышесказанное имеет место  только  в  случае
                 работы в пассивном режиме профилирования.

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

        time =       timer   *    counts    / counts
        area         total        area        total

     Но на самом деле время,  вычисленное по приведенной формуле,
не соответствует в точности времени,  затраченному на  выполнение
данного фрагмента. Если программа содержит в себе цикл, в котором
с частотой,  кратной частоте прерывания таймера, происходит обра-
щение к некоторой подпрограмме (например,  к подпрограмме генера-
ции звука одной тональности),  то выполнение некоторой конкретной
строки (или фрагмента) может точно совпасть с большинством преры-
ваний таймера.  Описанное явление резонанса может возникнуть даже
в том случае,  когда на выполнение рассматриваемой строки не зат-
рачивается большая часть времени, ушедшего на выполнение всей ва-
шей программы. Подобные ситуации редки, но вполне возможны.

     Если вы подозреваете, что возникла подобная ситуация с нало-
жением частот,  измените значение тактовой  частоты  (используйте
параметр Statistics/Profiling Options/Clock Speed) и сравните по-
лученные результаты профилирования с предыдущими.

            ИСПОЛЬЗОВАНИЕ ПАМЯТИ ПРОФИЛИРОВЩИКОМ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     На рис. 4.2 показано распределение памяти при профилировании
некоторой программы с помощью системы Turbo Profiler.

память небольшой ЪДЙННННННННННННННННННН»
 емкости         і є программный код   є<ДДДД  программа
                 і є                   є     Turbo Profiler
                 і є                   є
                 і є                   є
                 і є                   є
                 і є                   є
                 і є     данные        є
Turbo Profiler  Дґ єДДДДДДДДДДДДДДДДДДДє
                 і є   динамически     є
                 і є  распределяемая   є<ДДДД символические
                 і є  область памяти   є          имена
                 і єДДДДДДДДДДДДДДДДДДДє
                 і є                   є
                 і є                   є<ДДДД переменные маркера
                 і є                   є       фрагмента и буферы
                 АДєДДДДДДДДДДДДДДДДДДДє
                   є    программа      є
                   є   пользователя    є<ДДДД профилируемая
память большой     є                   є      программа
 емкости           ИНННННННННННННННННННј

     Рис. 4.2. Карта распределения памяти для системы Turbo
               Profiler

     Для хранения информации,  касающейся фрагментов, профилиров-
щик  отводит  динамически  распределяемую область памяти.  Если в
процессе выполнения программы вы добавите новые фрагменты, то эта
динамически  распределяемая  область может распространиться на ту
часть памяти, которая зарезервирована для программы пользователя,
- с тем, чтобы разместить в ней переменные новых фрагментов и бу-
феры.  Поэтому, если вы вносите изменения в разметку фрагментов в
ходе  выполнения программы,  то вам необходимо повторно запустить
программу с помощью команды Run/Program Reset.  Если вы этого  не
сделаете, то результаты профилирования могут быть совершенно неп-
редсказуемыми, а компьютер может просто "зависнуть".

РИЛОЖЕНИЕ А. ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Общий формат  командной  строки,  используемый  при  запуске
системы Turbo Profiler, имеет следующий вид:

   TPROF [параметры_tprof] [имя_программы [аргументы_ программы]]

где "параметры_tprof" -  это  список,  состоящий  из  одного  или
нескольких  параметров  командной  строки для профилировщика (см.
таблицу А.1),  "имя_программы" - это имя профилируемой прикладной
программы, "аргументы_программы" - это список, состоящий из одно-
го или нескольких аргументов командной строки  для  профилируемой
программы.

     Можно набрать на клавиатуре только лишь "TPROF", не указывая
ни параметров,  ни имени программы.  В этом случае затем потребу-
ется с  помощью  команд  среды  системы  Turbo Profiler загрузить
в эту среду прикладную программу.

     Ниже приводятся некоторые примеры командных строк, запускаю-
щих систему Turbo Profiler:

tprof -sc prog1 a b        Данная команда  производит  запуск
                           профилировщика с  параметром  "-sc"  и
                           загружает  программу PROG1 с двумя ар-
                           гументами командной строки "а" и "b".

tprof prog2  -x            Эта команда запускает профилировщик со
                           значениями параметров,  задаваемыми по
                           умолчанию, и загружает программу Prog2
                           с одним аргументом "-х".

                ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все параметры  командной строки системы Turbo Profiler начи-
наются с символа дефиса ("-").  Каждый из параметров должен отде-
ляться  от  команды TPROF и от других параметров командной строки
по крайней мере одним пробелом или символом табуляции.

     Для того,  чтобы  отменить  какой-нибудь  параметр командной
строки,  необходимо ввести символ дефиса  ПОСЛЕ  соответствующего
параметра.  Например,  последовательность  "-vg-"  явно отключает
действие параметра,  сохраняющего графику. Обычно приходится отк-
лючать  действие какого-либо параметра только в том случае,  если
данный параметр постоянно установлен в файле конфигурации  профи-
лировщика TFCONFIG.TF.  (файл  конфигурации  можно модифицировать
при помощи инсталляционной программы TFINST,  описанной в "Прило-
жении B" данного руководства).

     В таблице А.1 дана сводка параметров командной строки систе-
мы Turbo Profiler;  более подробное описание этих параметров  со-
держится далее.

 Таблица А.1 Параметры командной строки системы Turbo Profiler
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Параметр                         Действие параметра
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-b                         Загружает Turbo Profiler в режиме
                           командного файла

-c<файл>                   Загружает файл конфигурации с именем
                           "файл".

-do                        Запускает  профилировщик   на втором
                           дисплее.

-dp                        Изображает среду  профилировщика  на
                           одной дисплейной странице, а данные,
                           выводимые профилируемой  программой,
                           на другой странице.

-ds                        Поддерживает     отдельные    образы
                           экранов    для   профилировщика    и
                           профилируемой программы.

-h                         Отображает экран помощи.

-?                         Также отображает экран помощи.

-m                      Устанавливает   размер  динамической
                           области памяти  ("кучи") равным  "N"
                           килобайт.

-р                         Разрешает использование мыши.

-r                         Разрешает профилирование на внешней
                           (удаленной) системе.

-rnL;R                     Удаленное профилирование в сети, где
                           L-локальная машина, а R-удаленная.

-rp                     Устанавливает номер порта "N", через
                           который   осуществляется   удаленная
                           связь.

-rs                     Устанавливает  скорость  обмена  при
                           удаленной связи.

-sc                        Приводит к тому, что при  вводе имен
                           символов не    учитывается   регистр
                           (верхний  или  нижний),  в   котором
                           набираются эти имена.

-sdDIR                     Устанавливает  одну  или   несколько
                           директорий   для  поиска  файлов   с
                           исходными текстами.

-vg                        Сохраняет полный  графический  образ
                           экрана программы.

-vn                        Отключает    43/50-строчный    режим
                           работы дисплея.

-vp                        Включает сохранение  палитры EGA для
                           экрана  вывода  программы.

-w                         Профилирование программы среды Windows
                           на удаленной системе.

-y                      Задает  размер  области  памяти,   в
                           которой размещаются оверлеи,  равным
                           "N" килобайт.

-ye                     Задает  размер области в памяти EMS,
                           предназначенной для оверлеев, равным
                           "N" страниц по 16К каждая.

                 Режим командного файла (-b)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр -b указывает,  что Turbo Profiler будет запускаться
в режиме командного файла.  Среда Turbo Profiler в данном  режиме
не активизируется;  вместо этого профилировщик выполняет приклад-
ную программу и записывает всю статистическую информацию в файл с
именем "имяфайла.TFS", где "имяфайла" является именем загружаемо-
го файла прикладной программы.

     Параметр -b предоставляет  возможность  создавать  командные
файлы среды DOS для одной или нескольких команд TPROF.  Если про-
филируемой программе не требуется ввод данных с  клавиатуры,  ко-
мандный файл можно выполнить, одновременно выполняя что-либо дру-
гое.

ПРИМЕЧАНИЕ: Перед профилированием в режиме командного файла,  не-
обходимо создать файл описания фрагментов для того, чтобы опреде-
лить, какие фрагменты программы и в каком режиме следует  обрабо-
тать.

     Для того,  чтобы  создать  файл  описания фрагментов следует
загрузить прикладную программу и выбрать необходимый режим профи-
лирования ("Statistic|Profiling Options"). Затем следует пометить
требуемые фрагменты, устанавливая как маркеры Enable (Разрешить),
так и  маркеры  Disable (Отменить).  После чего следует завершить
работу с Turbo Profiler.  Вследствие этого будет  создан  файл  с
расширением .TFA,  в  котором  указываются отобранные фрагменты и
режим профилирования.

     После создания файла описания  фрагментов,  следует  создать
командный файл среды DOS, в который необходимо включить требуемые
команды системы Turbo Profiler. Например:

     Tprof -b MYPROG arg1 arg2
     rename MYPROG.TFS MYPROG1.TFS
     TPROF -b MYPROG arg1 arg3
     rename MYPROG.TFS MYPROG2.TFS
     Tprof -b MYPROG arg2 arg2
     rename MYPROG.TFS MYPROG3.TFS
     TPROF -b MYPROG arg2 arg3

     Обратите внимание,  что после каждой команды  TPROF  следует
переименовать файл  с  расширением  .TFS.  Если  этого не делать,
то успешная обработка одной и той же программы приведет к переза-
писи ранее  полученных статистических данных.  После создания ко-
мандного файла среды DOS,  его  следует  запустить  из  командной
строки DOS.

                  Файл конфигурации ("-с")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Этот параметр  указывает  системе Turbo Profiler на то,  что
необходимо загрузить файл  конфигурации  c  заданным  именем.  По
умолчанию именем  этого файла считается TFCONFIG.TF.  Если требу-
ется загрузить какой-либо другой  файл,  необходимо  указать  имя
этого файла  конфигурации  сразу  же вслед за "-с",  причем между
именем файла и названием параметра не должно быть пробелов.

                  Способ отображения ("-d")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все параметры,  начинающиеся с символов "-d",  задают способ
отображения данных, используемый профилировщиком.

-do  Запускает профилировщик на втором дисплее. Одновременно можно
     наблюдать за поведением прикладной программы на одном  дисп-
     лее,  в то время как система Turbo Profiler работает на вто-
     ром дисплее.

-dp  Это параметр по умолчанию для цветных дисплеев. При  задании
     данного параметра среда профилировщика отображается на одной
     дисплейной странице,  а вывод профилируемой программы  -  на
     другой.

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

-ds  Это параметр  по  умолчанию  для  монохромных  дисплеев.  Он
     обеспечивает поддержку отдельных образов экранов для  профи-
     лировщика и профилируемой программы.

     При каждом запуске программы или повторном обращении к  про-
     филировщику система Turbo Profiler считывает из памяти соот-
     ветствующий экран целиком. Этот метод поддержки двух образов
     экранов  является  самым медленным,  но он применим к любому
     типу дисплея и работает с программами, использующими для ви-
     деодоступа необычные средства.

                    Помощь ("-h" и "-?")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Оба этих параметра вызывают отображение  информации  о  син-
таксисе  командной  строки  и  список  параметров  системы  Turbo
Profiler.

     Рис. А.1. Помощь, предоставляемая системой Turbo Profiler
               на уровне DOS (см. в оригинальном руководстве)

         Модификация размера динамически распределяемой
                   области памяти ("-m")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Этот параметр задает размер динамически распределяемой рабо-
чей области памяти равным "N" килобайт, синтаксис этого параметра
имеет вид:

     -m

     По умолчанию размер рабочей области задается равным 40К, на-
ибольшее допустимое значение - это 64К. Если прикладная программа
для своего выполнения требует большого объема памяти,  то при по-
мощи параметра "-m" можно уменьшить размер  динамической  области
памяти, используемой  системой  Turbo Profiler.  Также при помощи
этого параметра ее размер можно увеличить во время профилирования
программ, занимающих мало места в памяти. Этот параметр позволяет
системе Turbo Profiler временно хранить в верхних адресах области
некоторую дополнительную информацию,  такую, например, как список
команд, вызванных пользователем в ходе сеанса профилирования.

     Если программа TPROF исчерпывает доступную ей память,  выда-
ется сообщение об ошибке при любой попытке открыть какое-либо ок-
но или выполнить какую-нибудь другую операцию, требующую большого
объема памяти. В этом случае могут быть частично утрачены некото-
рые статистические данные, например, о вызывающих подпрограммах.

                    Поддержка мыши ("-р")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Этот параметр разрешает работу с мышью.

               Удаленное профилирование ("-r")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все параметры,  начинающиеся с символов "-r", влияют на  ха-
рактеристики удаленного профилирования.

-r       Разрешает профилирование на удаленной системе через по-
         следовательный канал связи. Последовательный порт (СОМ1)
         и скорость  передачи  данных  (115 Кбод) используется по
         умолчанию до тех пор,  пока эти значения не изменяются с
         помощью программы TFINST.

-rnL;R   Разрешает  профилирование  на  удаленной системе через
         локальную вычислительную сеть.  L и R являются  необяза-
         тельными аргументами, соответственно определяющими имена
         локальной и удаленной систем.

-rp   Устанавливает номер "N" порта, используемого для удаленно-
         го  профилирования.  Значение  N=1  соответствует  порту
         СОМ1, а N=2 порту СОМ2.

-rs  Устанавливает  скорость передачи данных при удаленном про-
        филировании в соответствии со значением "N", как показано
        ниже:

       ДДДДДДДДДДДДДДДДДДДДДДДД
          N        Скорость
       ДДДДДДДДДДДДДДДДДДДДДДДД
          1        9600   бод
          2        19200  бод
          3        38400  боg
          4        115000 бод
       ДДДДДДДДДДДДДДДДДДДДДДДД

               Исходный текст и символы ("-s")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все параметры, начинающиеся с символов "-s", определяют, как
система Turbo Profiler работает с исходным  текстом  программы  и
символьными именами.

-sc  Определяет  игнорирование регистра при вводе символьных имен
     с клавиатуры, даже если программа была скомпонована с учетом
     регистра набора имен.

     Если параметр  "-sc" отсутствует,  то система Turbo Profiler
     игнорирует регистр символов при наборе только в том  случае,
     если программа  была  скомпонована без учета регистра набора
     символов.

     Примечание: Параметр "-sc" не работает в случае профилирова-
                 ния программ,  написанных на языке Turbo Pascal.
                 Turbo Pascal не чувствителен к тому, в каком ре-
                 гистре клавиатуры набираются имена.

-sdDIR  Задает  один  или несколько каталогов  для поиска исходных
        текстов. Синтаксис параметра имеет вид:

        -sdимя_каталога

     "Имя_каталога" может представлять собой путь -  как  относи-
     тельный,  так  и абсолютный - и может включать в себя буквы,
     обозначающие дисководы.  При задании  нескольких  директорий
     для каждой  из  них  следует использовать отдельный параметр
     "-sd", или же задать их вместе следующим образом:

        -sdимя_каталога1;имя_каталога2;имя_каталога3

     Turbo Profiler просматривает каталоги в порядке указания.

     Если в  файле  конфигурации тоже задан список каталогов,  то
     профилировщик добавляет к этому списку те каталоги,  которые
     заданы при помощи параметра "-sd".

                  Видеооборудование ("-v")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все параметры,  начинающиеся с символов  ("-v"),  определяют
то, как система Turbo Profiler работает с видеооборудованием.

-vg  Приводит к сохранению  полного  графического  образа  экрана
     программы.  При задании этого параметра дополнительно требу-
     ется 8К памяти,  но это предоставляет возможность профилиро-
     вать программы,  использующие специальные графические режимы.
     Попробуйте задать  этот параметр,  если при выполнении прик-
     ладной программы под управлением  профилировщика  происходит
     искажение ее графического экрана.

-vn Отключает  43/50-строчный режим дисплея.  Задание этого пара-
     метра позволяет сэкономить некоторый объем  памяти.  Исполь-
     зуйте  параметр  "-vn" в том случае,  если компьютер оснащен
     адаптером EGA или VGA и в процессе профилирования  не  будет
     использоваться 43- или 50-строчный режим.

-vp  Позволяет сохранить палитру экрана,  на который производит
     вывод прикладная программа при работе с EGA/VGA. Используйте
     этот параметр,  если программа работает в специальных графи-
     ческих режимах адаптеров EGA и VGA.

даленное профилирование прикладных программ среды Windows ("-w")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-w   Определяет, что профилируемая на удаленной системе  програм-
     ма является  программой среды Windows.  Этот параметр должен
     использоваться в командной строке совместно с одним из пара-
     метров -r.

              Размер оверлейной области ("-у")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При помощи параметров,  начинающихся с символов "-у",  зада-
ется  размер  оверлейной области,  расположенной либо в основной,
либо в EMS памяти.

-y Этот параметр  задает  размер оверлейной области в основной
      памяти.  Синтаксис задания этого параметра имеет  следующий
      вид:

         -y

      где "N" - это число килобайт,  которое Вы хотите зарезерви-
      ровать.

      Обычно система  Turbo  Profiler  использует для своего кода
      область памяти величиной 80К.  Наименьший  размер  области,
      который  Вы  можете установить,  равен 20К,  а наибольший -
      250К.

      Используйте этот параметр в случае нехватки памяти при заг-
      рузке  прикладной программы в Turbo Profiler или в том слу-
      чае,  если отлаживается небольшая по размерам  программу  и
      требуется   увеличить   производительность   системы  Turbo
      Profiler.  Чем меньше размер области памяти, отведенной для
      кода системы, тем чаще профилировщику приходится подгружать
      с диска оверлеи  и  тем  медленнее  реакция  системы  Turbo
      Profiler. Чем больше размер этой области, тем меньшее коли-
      чество памяти отдается в распоряжение  профилируемой  прог-
      раммы, но тем быстрее работает система Turbo Profiler.

-ye Этот параметр устанавливает размер  оверлейной  области  в
       памяти  EMS.  Используйте этот параметр в случае необходи-
       мости освободить часть EMS-памяти для профилируемой  прог-
       раммы.  Синтаксис  задания этого параметра имеет следующий
       вид, где  N  -  это  число резервируемых страниц EMS по 16
       Кбайт:

        -ye

     Например, параметр вида "-ye4" устанавливает размер оверлей-
     ной области равным четырем страницам. По умолчанию этот раз-
     мер устанавливается равным двенадцати страницам  EMS-памяти,
     по 16К каждая.

       ПРИЛОЖЕНИЕ B. НАСТРОЙКА СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система Turbo Profiler готова к работе сразу же,  как только
готовы рабочие  копии дистрибутивных дискет.  Тем не менее многие
характеристики системы,  задаваемые по умолчанию,  можно изменить
при помощи программы настройки, которая называется TFINST. Значе-
ния некоторых параметров можно изменить,  используя для этого па-
раметры  командной  строки,  задаваемые при запуске системы Turbo
Profiler из DOS.  Если приходится часто задавать одни и те же па-
раметры  командной  строки,  имеет смысл задать эти параметры при
помощи программы настройки.

     Программа настройки позволяет определять следующие  характе-
ристики системы:

* внешний вид и цвета экрана и окна

* параметры отображения:  режим перестановки экранов,  количество
  строк в экране,  ширина колонок при табуляции, быстрое обновле-
  ние  экрана,  43-/50-строчный режим,  сохранение полного графи-
  ческого образа,  обновление пользовательского  экрана.

* команду запуска редактора и каталоги для поиска файлов,  содер-
  жащих исходные тексты, а также файла конфигурации и файла помо-
  щи системы Turbo Profiler

* параметры, регулирующие пользовательский ввод и запросы системы
  на этот  ввод:  длина  списка,  содержащего предысторию сеанса,
  звуковой сигнал при ошибке, мышь и клавиши оперативного доступа

* перехват   NMI   (немаскируемого   прерывания   -   от    англ.
  "Non-maskable interrupt"), задание спецификаций расширенной па-
  мяти (EMS) для таблицы символических имен и удаленное  профили-
  рование

* режим работы дисплея

                 ВЫПОЛНЕНИЕ ПРОГРАММЫ TFINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДї
і Colors                і і Цвета            і
і Display...            і і Отобразить ...   і
і Options               і і Параметры        і
і Mode for display      і і Режим отображенияі
і Save                  і і Сохранить        і
і Quit                  і і Выход            і
АДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДЩ

     Для выполнения программы настройки необходимо набрать TFINSТ
в командной строке DOS.  После загрузки TFINST, на экране появля-
ется главное меню программы.  Для того,  чтобы выбрать какую-либо
команду из этого меню,  необходимо  либо  нажать  клавишу,  соот-
ветствующую подсвеченной первой букве этой команды,  либо при по-
мощи клавиш {стрелка-вверх} и {стрелка-вниз} выделить необходимую
команду световым маркером и нажать клавишу {Enter}. Например, для
того,  чтобы изменить характеристики работы дисплея, нажмите кла-
вишу  {D}.  Выбор  команд из других меню программы настройки осу-
ществляется точно так же. Для того, чтобы возвратиться к предыду-
щему меню,  необходимо  нажать клавишу {Esc}.  Иногда,  для того,
чтобы попасть в главное меню,  понадобится несколько  раз  нажать
клавишу {Esc}.

Выход из программы

     Для того,  чтобы завершить работу с программой ТFINST, необ-
ходимо выбрать в строке меню команду  File|Quit  (Файл|Выход)
(или нажать {Alt}{X}).

                   УСТАНОВКА ЦВЕТОВ ЭКРАНА
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для вызова меню "Colors" ("Цвета") необходимо в главном меню
выбрать команду Colors (Цвета). В меню "Colors" ("Цвета") предла-
гается  два варианта:  "Customize" ("Настроить") и "Default Color
Set" ("Набор цветов по умолчанию").

                     Настройка цветов экрана
                     ДДДДДДДДДДДДДДДДДДДДДДД

     При выборе команды "Customize" ("Настроить") на экране появ-
ляется очередное (третье) меню,  в которое включены параметры для
подбора цветов окон, блоков диалога, меню и экранов.

                     Команда Windows (Окна)

     Для того, чтобы задать цвета окон, необходимо выбрать коман-
ду Windows (Окна).  В результате этого вызывается меню четвертого
уровня, в  котором можно выбрать тип настраиваемого окна:  Text
(Текстовое), Statistics (Статистики) или Disassembly  (Дисассемб-
лера) (окно CPU (ЦП)).  При выборе одного из вариантов появляется
еще одно меню, в котором приводится список элементов окна, а так-
же два образца окон (одно активное,  другое пассивное), в которых
можно проверить различные  цветовые  комбинации.  Зкран  выглядит
следующим образом:

     Рис. В.1.  Настройка цветов окон (см.  в оригинальном  руко-
водстве)

     При выборе какого-либо элемента окна,  цвет которого  требу-
ется изменить, на меню накладывается блок выбора палитры. Для пе-
ремещения по блоку палитры используйте клавиши управления  курсо-
ром. При перемещении блока выбора с одного цвета на другой,  эле-
мент окна,  цвет которого требуется изменить,  также меняет  свой
цвет,  чтобы  продемонстрировать текущий выбор. После определения
требуемого цвета  нажмите клавишу {Enter}.

     Примечание:       Система Turbo Profiler  поддерживает  три
                       таблицы цветов: одну для цветового режима,
                       другую для черно-белого и третью  для  мо-
                       нохромного. В  зависимости от текущего ви-
                       деорежима и технических средств можно  ме-
                       нять только  один  из  этих наборов.  Так,
                       при необходимости скорректировать таблицу,
                       относящуюся к черно-белому режиму во время
                       работы с цветным  дисплеем, предварительно
                       задайте  черно-белый  режим работы,  введя
                       для этого в командную строку  DOS
                                   MODE BW80
                       а затем запустите программу TFINST.

                      Блоки диалогов и меню

     При выборе команды Dialogs  (Диалоги)  из  меню  "Customize"
("Настроить") или "Menus" ("Меню") на экране появится меню, в ко-
тором приводится список элементов меню или блока диалога, а также
образец блока  диалога или меню,  с которым можно экспериментиро-
вать.

     Точно так же,  как и в меню "Windows" ("Окна"),  выбор како-
го-либо  элемента из текущего меню приведет к появлению на экране
палитры, при помощи которой можно подобрать цвет для данного эле-
мента.

                            Экран

ЪДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Pattern for backgroundі і Шаблон  для фона              і
іДДДДДДДДДДДДДДДДДДДДДДДі іДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі
і Pattern background    і і Фоновый цвет шаблона          і
і Pattern foreground    і і Основной цвет шаблона         і
і Window move backgroundі і Фоновый цвет перемещения окна і
іДДДДДДДДДДДДДДДДДДДДДДДі іДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі
і Window move foregroundі і Основной цвет перемещения окнаі
АДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     При выборе   команды  Screen  (Экран)  из  меню  "Customize"
("Настроить") появляется меню,  из которого имеется доступ к дру-
гому меню, содержащему шаблоны экрана и палитры для элементов эк-
рана, а также образец фонового оформления экрана, на котором мож-
но опробовать свой выбор цветов.

               Цвета, задаваемые по умолчанию
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если в  меню  "Colors"  ("Цвета")  выберется элемент Default
Color Set (Набор цветов по умолчанию), то на экране появятся точ-
ные копии активного текстового окна и неактивного окна. Они пока-
зывают раскраску элементов окон цветами,  задаваемыми по  умолча-
нию. При помощи блока диалога можно выбрать для просмотра тексто-
вые окна,  а также окна,  отображающие  статистические  данные  и
дисассемблированный текст программы.

   УСТАНОВКА ПАРАМЕТРОВ ОТОБРАЖЕНИЯ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для того, чтобы вызвать блок диалога "Display Options" ("Па-
раметры отображения") (см.  рис. В.2 в оригинальном руководстве),
выберите из главного меню команду Display (Отобразить).

     Рис. В.2. Блок диалога "Display Options" ("Параметры
               отображения")

     Примечание:       Эти параметры отображения включают в себя
                       те, которые можно задать в командной стро-
                       ке DOS при запуске системы Turbo Profiler,
                       а также те,  которые можно установить иск-
                       лючительно с помощью TFINST.  Соответствие
                       между параметрами командной строки и пара-
                       метрами TFINST приведено в таблице  В.1  в
                       разделе  "Параметры  командной строки и их
                       эквиваленты в программе TFINST" настоящего
                       приложения.

     Параметр  Display Swapping  (Перестановка экранов)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При помощи  псевдокнопок  параметра  Display Swapping (Смена
экранов) можно управлять сменой экрана собственно  системы  Turbo
Profiler на экран, куда осуществляет вывод профилируемая програм-
ма. Можно  выбирать  следующие значения:

None (Никогда)  Смена этих экранов не осуществляется. Используйте
                это  значение  в  том  случае,  если профилируется
                программа,  которая не выводит никаких  данных  на
                экран пользователя.

Always (Всегда) Производится  переключение на экран пользователя
                при каждом  запуске  пользовательской  программы.
                Используйте это значение в том случае, если прог-
                рамма выводит информацию на пользовательский  эк-
                ран.
                Данное значение  параметра   устанавливается   по
                умолчанию.

            Параметр Screen Lines (Строки экрана)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Используйте псевдокнопки  для определения числа строк на эк-
ране дисплея,  с которым должна работать система Turbo  Profiler:
либо 25 строк на экране, либо 43 или 50.

     Примечание: Отображение  на экране более 25 строк  возможно
                 только при использовании видеоадаптера EGA  или
                 VGA.

   Блок "Fast Screen Update" ("Быстрое обновление экрана")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Блок "Fast Screen Update" ("Быстрое обновление экрана") поз-
воляет определить, будет ли быстро обновляться изображение на эк-
ране. Установите этот блок в пассивное состояние, когда при быст-
ром обновлении экрана на нем появляется  "снег".  Это следует сде-
лать только  в том случае,  если "снег",  появляющийся на экране,
раздражает. (Некоторые пользователи предпочитают быстрое обновле-
ние экрана, несмотря на появляющийся при этом "снег").

 Блок "Permit 43/50 lines" (Разрешить 43/50-строковый режим)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При переводе этого блока в активное состояние можно  исполь-
зовать  режимы работы дисплея с большими экранами (43-/50-строко-
выми). При переводе этого блока в пассивное состояние можно осво-
бодить приблизительно 8К памяти, поскольку режимы дисплея с боль-
шим количеством строк требуют большего объема памяти для хранения
буферов окон  системы  Turbo Profiler.  Этот блок может оказаться
полезным при профилировании  программы  очень  большого  размера,
требующей наибольшего об'ема памяти. При пассивном состоянии это-
го блока дисплей нельзя переключить в 43-/50-строковый режим  ра-
боты даже  в  том случае,  если аппаратные средства позволяют это
сделать.

лок "Full Graphics Saving" ("Сохранение графических экранов")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При переводе этого блока в активное  состояние каждая  смена
экрана  системы  Turbo Profiler пользовательским экраном вызывает
сохранение всего буфера графического экрана.  При переводе  этого
блока в  пассивное  состояние  освобождается примерно 12К памяти.
Это бывает очень полезно при профилировании очень  большой  прог-
раммы, для которой требуется наибольший об'ем памяти.  Единствен-
ное, что может препятствовать переводу данного блока  в  активное
состояние  -  это появление на пользовательском экране небольшого
количества искажаемых участков,  которые как правило,  не  мешают
нормальной работе.

            Блок "Tab Size" ("Размер табуляции")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В этом блоке можно определить расстояние между позициями та-
буляции при отображении текстовых или исходных  файлов.  Согласно
запроса следует ввести число позиций (в диапазоне от 1 до 32); по
умолчанию задается значение 8.

               Параметр "User Screen Updating"
             ("Обновление пользовательского экрана")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     С Помощью  псевдокнопок  параметра  "User  Screen  Updating"
("Обновление пользовательского экрана") задается способ  обновле-
ния пользовательского  экрана  при  смене  данного экрана экраном
системы Turbo Profiler. Для этого имеются три возможности:

Other Display     Система Turbo Profiler  выполняется  на  другом
(Другой дисплей)  дисплее системы. В том случае, если имеется как
                  цветной, так и монохромный адаптер,  этот пара-
                  метр позволяет  следить  за  экраном прикладной
                  программы на одном  дисплее,  а  экран  системы
                  Turbo Profiler - на другом.

Flip Pages        Экран системы Turbo Profiler размещается на от-
(Сбрасывание      дельной дисплейной странице.  Этот параметр ра-
страниц)          ботает только в случае, если видеоадаптер имеет
                  несколько  дисплейных  страниц  (как  это имеет
                  место в  случае  адаптеров  CGA,  EGA или VGA).
                  Этим параметром нельзя воспользоваться при  мо-
                  нохромном дисплее. Этот параметр используется в
                  большинстве ситуаций,  возникающих  при  работе
                  профилировщика.  Переключение  между экранами в
                  случае использования этого параметра происходит
                  очень быстро. Задание этого параметра может по-
                  мешать только выполнению программ, работающих с
                  несколькими дисплейными страницами.

Swap (Свопинг)   Используется один   дисплейный  адаптер  и  одна
                 дисплейная страница и производится свопинг экра-
                 на пользователя и экрана системы Turbo Profiler.
                 Это самый медленный из способов обновления экра-
                 на, но наиболее надежный и защищенный от внешних
                 воздействий. При    профилировании    программы,
                 использующей  для  своего вывода несколько стра-
                 ниц, необходимо воспользоваться данным  парамет-
                 ром. Также используйте данное значение параметра
                 в случае выхода в оболочку DOS и запуска  других
                 программ или в случае использования TSR-программ
                 (таких, например, как SideKick Plus), если необ-
                 ходимо  убедиться  в сохранности текущего экрана
                 системы Turbo Profiler.

              ПАРАМЕТРЫ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Команда Options (Параметры) главного меню открывает меню па-
раметров,  при помощи которого, в свою очередь, открываются соот-
ветствующие блоки диалога.

ЪДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДї
і Directories...        і і Директории ...        і
і Input & prompting...  і і Ввод и приглашения... і
і Miscellaneous...      і і Разнообразные...      і
АДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДЩ

Блок диалога "Directories" ("Директории")

     Этот блок диалога содержит блоки ввода, при помощи которых
можно ввести следующие данные:

Editor program name  В данном  блоке  ввода  указывается  команда
(Имя программы       DOS,  при  помощи которой запускается редак-
редактора)           тор. Это  позволяет  во  время  сеанса профи-
                     лирования использовать  привычный  редактор,
                     когда в  файле  потребуется что-нибудь изме-
                     нить. Система Turbo Profiler добавляет в ко-
                     нец этой команды через пробел имя файла, ко-
                     торый будет редактироваться с помощью  этого
                     редактора.

Source directories  В этом  блоке ввода необходимо указать список
(Каталоги исходных  каталогов,  в которых система Turbo Profiler
текстов)            будет искать исходные тексты.

Turbo directorу    В этом  блоке ввода указывается каталог,  в
(Каталог Turbo)    котором система Turbo Profiler ищет  собствен-
                   ные файлы конфигурации и помощи.

           Блок диалога "User Input and Prompting"
            ("Ввод пользователем и запросы системы")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Этот блок диалога позволяет устанавливать параметры, регули-
рующие ввод информации в систему Turbo Profiler,  а также запросы
системы Turbo  Profiler на ввод информации (см.  рисунок в ориги-
нальном руководстве):

     Рис. В.3. Блок  диалога "User Input and Prompting" ("Ввод
               пользователем и запросы системы")

Блок ввода "History List Length" ("Длина списка предыстории")

     Этот блок ввода позволяет задать  число  предыдущих  вводов,
которые должны быть сохранены в списке предыстории блока ввода.

     Блок "Beep on Error" ("Звуковой сигнал при ошибке")

     По умолчанию система Turbo Profiler генерирует звуковой пре-
дупреждающий сигнал в случае нажатия неправильной клавиши или вы-
полнения действия, вызывающего сообщение об ошибке. Блок "Beep On
Error" ("Звуковой  сигнал  при  ошибке")  позволяет отменить этот
звуковой сигнал.

         Параметр Interrupt Key (Клавиша прерывания)

     С помощью псевдокнопок параметра Interrupt Key (Клавиша пре-
рывания) предоставляется возможность переназначить клавишу преры-
вания  системы Turbo Profiler - вместо используемой ею по умолча-
нию клавиши {Break} назначить либо клавишу {Escape}, либо клавишу
{Numlock},  либо другую клавишу или комбинацию клавиш. При выборе
псевдокнопки "Other ("Другая") на экране появится запрос,  на оп-
ределение той  клавиши  или  комбинации  клавиш,  которую следует
использовать в качестве клавиши прерывания.

          Блок "Mouse Enabled" ("Подключение мыши")

     Этот блок  позволяет  устанавливать,  будет ли система Turbo
Profiler обеспечивать поддержку мыши по умолчанию.

Блок "Control Key Shortcuts" ("Клавиши оперативного доступа")

     Этот блок  разрешает или отменяет использование клавиш быст-
рого доступа. В том случае, если эта кнопка активна, любую коман-
ду  локального  меню можно вызвать посредством нажатия комбинации
клавиш, состоящей из клавиши {Ctrl} и первой буквы  соответствую-
щей  команды меню.  Но в этом случае нельзя воспользоваться этими
комбинациями клавиш для перемещения курсора (как это  можно  сде-
лать в редакторе типа WordStar).

            Блок диалога "Miscellaneous Options"
                   ("Разнообразные параметры")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Блок диалога  "Miscellaneous  Options" ("Разнообразные пара-
метры") содержит в себе параметры,  которые управляют прерывания-
ми, памятью типа EMS, свопингом оболочки DOS и режимом удаленного
профилирования.

     Рис. В.4. Блок диалога "Miscellaneous Options" ("Разнообраз-
               ные параметры") - см. в оригинальном руководстве.

         Параметр Printer Output (Вывод на пpинтеp)

     Этот паpаметp  позволяет выбиpать между печатью pасшиpенного
набоpа символов таблицы ASCII и печатью только стандаpтных симво-
лов ASCII из пеpвой половины таблицы.

лок "Use Expanded Memory" ("Использование расширенной памяти")

     Используйте этот блок  для  того,  чтобы  указывать  системе
Turbo Profiler на то, следует ли ей pазмещать в EMS-памяти табли-
цу имен.  Этот блок можно  активизиpовать  даже  если  прикладная
пpогpамма также использует EMS-память.

            Блок "NMI Intercept" ("Пеpехват NMI")

     Немаскиpуемое пpеpывание "NMI" представляет собой аппаратное
прерывание, которое процессор должен обрабатывать немедленно. Это
прерывание обычно используется для того,  чтобы прекратить выпол-
нение работы, когда возникает ошибка контроля по четности при об-
ращении к памяти: на экран выводится сообщение об ошибке, имеющее
вид "Memory Parity Error" ("Ошибка контроля по четности при обра-
щении к памяти"), и система зависает.

     Кроме того, это прерывание используется также для того, что-
бы  предоставить  возможность  плате отладчика ("debugger board")
выполнить прерывание в том случае, если нажата кнопка прерывания.
Поскольку в  системе  Turbo  Profiler  по умолчанию немаскируемое
прерывание ("NMI") отключено,  то возможно  понадобится  включить
это прерывание в том случае, если используется плата отладчика.

     Если система не установлена на компьютере модели Tandy 1000,
или  на  несовместимом с IBM PC,  или на модели ACER 1100 или NEC
MultiSpeed, то можно запустить пpогpамму TFINST и попытаться  ак-
тивизировать  блок  "NMI  Intercept" ("Пеpехват NMI").  Некотоpые
компьютеpы используют "NMI"  таким  обpазом,  что  система  Turbo
Profiler вступает с ними в конфликт. Поэтому если возникают труд-
ности при загрузке прикладных программ в систему  Turbo  Profiler
после включения этого параметра, запустите снова программу TDINST
и отмените использование системой Turbo Profiler  этого  пpеpыва-
ния.

                Блок "Ignore Case of Symbols"
           ("Игноpиpовать pегистp символических имен")

     Если этот блок находится в активном  состоянии,  то  система
Turbo  Profiler  по умолчанию не pазличает,  в каком из pегистpов
клавиатуpы набраны буквы в символических именах.  Если этот  блок
находится в пассивном состоянии, то регистр будет отслеживаться.

            Блок ввода "DOS Shell Swap Size (Кb)"
        ("Размер  области  свопинга для оболочки DOS в Кб")

     Данным блоком нельзя воспользоваться при работе с TPROFW.

     В этом  блоке  ввода задается количество килобайт памяти для
оболочки DOS.  Свопинг памяти предоставляет возможность использо-
вать команду "File|DOS Shell" ("Файл|Оболочка DOS") даже во время
профилирования программ большого размера.

Псевдокнопка "Remote Type" ("Тип удаленного профилирования")

     Эта псевдокнопка  предназначена для определения типа удален-
ного профилирования.  Значение по умолчанию None указывает на то,
что профилирование   локальное,   а  связь  с  удаленной  машиной
отсутствует. Значение Serial (Последовательный) указывает на  то,
что  удаленное  профилирование  идет через последовательный порт.
Порт связи и скорость передачи  данных  определяются  параметрами
Remote  Link Port (Порт связи с удаленной машиной),  а также Link
Speed (Скорость передачи данных). Параметр Network (Сеть) опреде-
ляет связь через ЛВС.

     Примечание:     Как  правило,  не следует сохранять файл
                     конфигурации, в котором указываются парамет-
                     ры   удаленного   профилирования,  поскольку
                     Turbo Profiler будет пытаться  устанавливать
                     связь с удаленной машиной при каждой загруз-
                     ке.

 Параметр Remote Link Port (Порт связи с удаленной машиной)

     Селективные кнопки для параметра Remote Link Port (Порт свя-
зи с удаленной машиной) позволяют  выбрать  для  удаленной  связи
последовательный порт СОМ1 или СОМ2.

       Параметр Link Speed (Скорость передачи данных)

     Псевдокнопки определения параметра Link Speed (Скорость  пе-
редачи данных)  позволяют выбрать одно из трех возможных значений
скорости передачи данных при удаленной связи: 9600 боg, 19200 боg,
38400 или 115000 боg.

 Блок "Network local name" ("Локальное имя системы в сети")

     Данный текстовый  блок  предоставляет возможность определить
имя по умолчанию локальной системы при удаленном профилировании с
использованием локальной  сети.  По  умолчанию  локальной системе
присваивается имя LOCAL.  Если в режиме удаленного профилирования
работает несколько человек, данное имя следует изменить.

 Блок "Network remote name" ("Имя удаленной системы в сети")

     Данный текстовый  блок  предоставляет возможность определить
имя по умолчанию удаленной системы при удаленном профилировании с
использованием локальной  сети.  По  умолчанию удаленной  системе
присваивается имя REMOTE. Если в режиме удаленного профилирования
работает несколько человек, данное имя следует изменить.

               УСТАНОВКА РЕЖИМА РАБОТЫ ДИСПЛЕЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При выборе команды "Mode for Display" ("Режим  работы  дисп-
лея") в главном меню на экране появляется меню,  позволяющее выб-
рать режим работы дисплея системы.

ЪДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Default               і і Задаваемый по умолчанию       і
і Color                 і і Цветной                       і
і Black and white       і і Черно-белый                   і
і Monochrome            і і Монохромный                   і
і LCD                   і і Дисплей на жидких кристаллах  і
АДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

          Команда Default (Задаваемый по умолчанию)

     Система Turbo Profiler определяет тип графического адаптера,
установленного на системе, и в соответствии с этим выбирает режим
работы дисплея.

                   Команда Color (Цветной)

     Если система оснащена графическим адаптером EGA,  VGA,  CGA,
MCGA или 8514, то при выборе данного режима, изображение на экра-
не будет цветным.

            Команда Black and White (Черно-белый)

     Если система оснащена графическим адаптером EGA,  VGA,  CGA,
MCGA или 8514, то при выборе данного режима, изображение на экра-
не будет черно-белым.

              Команда Monoсhrome (Монохромный)

     Данный режим следует использовать при работе с цветным мони-
тором и адаптером Hercules  или  монохромным  адаптером  алфавит-
но-цифрового дисплея.

         Команда LCD (Дисплей на жидких кристаллах)

     Если система оснащена дисплеем на жидких кристаллах,  то при
выборе этого режима вместо Black and White (Черно-белый) качество
изображения заметно повышается.

                         ЗАКЛЮЧЕНИЕ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После настройки системы Turbo Profiler следует сохранить все
установки (параметры) на диске.  Причем можно непосредственно из-
менить загружаемый  файл (TPROF.EXE) системы Turbo Profiler,  или
же создать файл конфигурации,  который  загружается  при  запуске
системы.

                    Сохранение изменений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

ЪДДДДДДДДДДДДДДДДДДДДДДДДДї ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Save configuration file і і Сохранить файл конфигурации   і
і Modify tprof.exe        і і Скорректировать файл tprof.exeі
АДДДДДДДДДДДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     После определения всех параметров системы Turbo Profiler вы-
берите команду Save (Сохранить) из главного меню и определите ка-
ким способом эти параметры будут сохранены.

 Команда Save Configurations File (Сохранить файл конфигурации)

     При выборе  команды  Save Configuration File (Сохранить файл
конфигурации) на экране откроется блок диалога,  в котором  будет
фигурировать  используемое  по  умолчанию  имя файла конфигурации
TFCONFIG.TF. Использование этого имени можно  подтвердить,  нажав
клавишу {Enter}  или  же  набрать на клавиатуре какой либо другое
имя файла конфигурации.  Если задается какое-либо свое имя файла,
то загружать  этот  файл  конфигурации можно при помощи параметра
командной строки "-с",  используемом при  запуске  системы  Turbo
Profiler. Например, это можно сделать следующим образом:

     tprof -cmycfg myprog

     Загрузить файл конфигурации можно также после запуска систе-
мы   Turbo   Profiler   при   помощи   команды   "Options|Restore
Configuration" ("Параметры|Восстановить конфигурацию").

    Команда Modify TPROF.EXE (Модифицировать файл TPROF.EXE)

     При выборе команды  Modify  TPROF.EXE  (Модифицировать  файл
TPROF.EXE), все изменения конфигурации сохраняются непосредствен-
но в самом загружаемом файле системы Turbo Profiler -  TPROF.EXE.
При  следующем  запуске системы Turbo Profiler эти значения пара-
метров будут использованы по умолчанию.

     Примечание: Если потребуется  вернуться  к  используемой  по
                 умолчанию конфигурации системы Turbo Profiler, с
                 которой эта система поставляется,  то для  этого
                 необходимо скопировать  файл TPROF.EXE с дистри-
                 бутивной дискеты на рабочий диск системы,  пере-
                 записав таким образом тот файл TPROF.EXE,  кото-
                 рый был модифицирован.

                       Выход из TFINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Программу TFINST  можно покинуть в любой момент,  выбрав ко-
манду Quit (Выход) главного меню.

АРАМЕТРЫ КОМАНДНОЙ СТРОКИ И ИХ ЭКВИВАЛЕНТЫ В ПРОГРАММЕ TFINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Некоторые из  параметров,  описанных  в  предыдущем разделе,
можно перезадать при запуске системы Turbo  Profiler  из  DOS.  В
следующей таблице показано соответствие между параметрами команд-
ной строки и теми командами программы TFINST,  которые устанавли-
вают соответствующие параметры.

        Таблица В.1. Параметры командной строки и их эквиваленты
                           в программе TFINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Параметр                            Команда меню  TFINST  и  блок
                                    диалога
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

               Display|Display Options (Дисплей|Параметры дисплея)

-do            (*)  Other Display (Второй дисплей)
-dp            (*)  Flip Pages  (Сбрасывать страницы)
-ds            (*)  Swap (Свопинг)

               Options|Input and Prompting|User Input and Prompting
               (Параметры|Ввод и запросы|Ввод пользователем и
                запросы)

-р             [X]  Mouse Enabled (Мышь используется)
-р-            [ ]  Mouse Enabled (Мышь не используется)

               Options|Miscellaneous|Miscellaneuos Options
               (Параметры|Смесь|Различные параметры)

-r             (*)  None (Отмена удаленного профилирования)
-r-            (*)  Serial  (Удаленное профилирование через
                    последовательный порт)
-rn            (*)  Network (Удаленное профилирование в локальной
                    сети)

               Options|Miscellaneous|Miscellaneuos Options
               (Параметры|Смесь|Различные параметры)

-rp1           (*)  COM1 (Порт COM1)
-rp2           (*)  COM2 (Порт COM2)

               Options|Miscellaneous|Miscellaneuos Options
               (Параметры|Смесь|Различные параметры)

-rs1           (*)  9600 бод
-rs2           (*)  19200 бод
-rs3           (*)  38400 бод
-rs4           (*)  115000 бод

               Options|Miscellaneous|Miscellaneuos Options
               (Параметры|Смесь|Различные параметры)

-sc            [X]  Ignore Case of Symbol (Игнорировать регистр
                    имен)

-sc-           [ ]  Ignore Case of Symbol (Учитывать регистр
                    имен)

               Options|Directories|Directories
               (Параметры|Директории|Директории)

-sd            Source Directories  (Директории исходных текстов)

               Display|Display Options  (Дисплей|Параметры  дисп-
               лея)

-vn            [ ]  Permit 43/50 Lines (Запрещается длина строки
                    43/50)
-vn-           [X] Permit 43/50 Lines (Разрешается длина строки
                    43/50)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Примечание: Для того,  чтобы получить полный список парамет-
                 ров командной строки программы TFINST.EXE, необ-
                 ходимо  при ее запуске после имени программы
                 набрать "-h":

                 TFINST -h

               ПРИЛОЖЕНИЕ C. УДАЛЕННОЕ ПРОФИЛИРОВАНИЕ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Удаленное профилирование  точно  соответствует своему назва-
нию: можно запускать Turbo Profiler на одном компьютере, а профи-
лируемую прикладную  программу - на другом.  Оба компьютера могут
быть соединены как через последовательный порт, так и посредством
локальной вычислительной сети (ЛВС), использующей NETBIOS.

     Удаленное профилирование  следует  использовать  в следующих
случаях:

* Когда  прикладной  программе  требуется  большой  об'ем памяти,
  вследствие чего нельзя одновременно запустить программу и Turbo
  Profiler на том же компьютере.

* Когда  профилируемая  программа  нормально загружается в память
  вместе с программой Turbo Profiler, но прикладной программе для
  нормального функционирования не хватает памяти.

* При профилировании прикладной программы среды Windows.

     При профилировании  прикладной  программы среды Windows пре-
доставляется выбор между профилированием на  одном  компьютере  с
помощью Turbo Profiler for Windows (TPROFW) или же удаленным про-
филированием, когда  на  одном  компьютере  загружается   система
Windows, программа Wremote и прикладная программа,  а на другом -
Turbo Profiler.

     Существует много  причин использовать профилирование на двух
машинах, однако преимущества такого подхода  становятся  особенно
ощутимыми при разработке программ среды Windows:

* При наличии единственного монитора в системе, профилирование на
  единственном компьютере  предполагает  постоянное  переключение
  между алфавитно-цифровым   режимом  отображения  системы  Turbo
  Profiler и графическим режимом прикладных программ.

  При удаленном профилировании можно одновременно отслеживать ра-
  боту системы  Turbo  Profiler и прикладной программы.  (Тот же
  эффект может быть достигнут при подключении  двух  мониторов  к
  одному компьютеру.)

* Программе  WREMOTE  требуется  значительно  меньше памяти,  чем
  системе Turbo Profiler,  таким образом поведение  профилируемой
  программы будет более достоверным,  чем при работе в среде про-
  филировщика.

     Перед обращением к удаленному  профилированию  следует  убе-
диться,  что  Turbo  Profiler использует возможности  расширенной
(EMS) памяти, которая установлена на компьютере. Для отслеживания
использования системой  Turbo  Profiler  расширенной (EMS) памяти
используйте программу конфигурации TFINST.

           ТРЕБОВАНИЯ, ПРЕДЪЯВЛЯЕМЫЕ К АППАРАТУРЕ
                   И ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

* Система должна обладать памятью, достаточной для загрузки TPROF
  (для локальной системы).

* Другой персональный компьютер с оперативной и дисковой памятью,
  достаточной для  работы  с  TFREMOTE и профилируемой прикладной
  программой или же с WREMOTE, Windows и профилируемой прикладной
  программой среды Windows (для удаленной системы).

  Для профилирования  программы  среды  Windows удаленная система
  должна обеспечивать работу в защищенном режиме, что предполага-
  ет наличие  по крайней мере ЦП 80286.  Об'ем необходимой памяти
  зависит от используемого режима работы,  однако не должен  быть
  менее 1 Мбайта.

     Для соединения двух систем с помощью последовательного порта
потребуется кабель фиктивного модема (null  modem).  Убедитесь  в
том,  что соединяющий две системы кабель установлен должным обра-
зом:  нельзя использовать  промежуточный  удлиняющий  кабель.  По
меньшей  мере  этот кабель должен менять местами линии передачи и
приема данных (линии 2 и 3 на 25-штыревом кабеле).

     Для соединения двух систем с помощью ЛВС необходимо  сетевое
оборудование, на  котором работает программное обеспечение,  сов-
местимое с Novell Netware (IPX и NETBIOS  версии  3.0  или  более
поздних версий).

Примечание: NETBIOS  должен загружаться как на локальной так и на
            удаленной системе перед загрузкой TPROF или WREMOTE.
            Данное правило  действительно как для обычного профи-
            лирования, так  для  профилирования  программ   среды
            Windows.

         УДАЛЕННОЕ ПРОФИЛИРОВАНИЕ ПРОГРАММ СРЕДЫ DOS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для удаленного профилирования прикладной программы среды DOS
необходимо на одном компьютере  запустить  программу  TPREMOTE  и
прикладную программу,  а  на  другом  - Turbo Profiler.  В данном
приложении компьютер, на котором загружается прикладная программа
и программа TFREMOTE, будет называться удаленным, а компьютер, на
котором загружается Turbo Profiler - локальным.

                 Установка удаленной системы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Скопируйте файл   TFREMOTE.EXE   на  удаленную  компьютерную
систему.  Перенесите на  удаленную  систему  все  файлы,  которые
используются профилируемой программой.  В число этих файлов могут
включаться файлы входных данных,  конфигурационные  файлы,  файлы
подсказки и так далее. По желанию на удаленную систему можно ско-
пировать саму прикладную программу.  Однако,  при  необходимости,
ее может автоматически  перенести  сама  система  Turbo  Profiler,
используя средства связи с удаленным компьютером.

     Для переноса  на  удаленный  компьютер  файлов  могут   быть
использованы гибкие диски или сервисная программа переноса файлов
на удаленный  компьютер  -  программа  TDRF  ("TRDF  Remote  File
Transfer  Utility").  Сервисная  программа  TDRF описана в файлах
вспомогательной информации.

           Настройка сервисной программы TFREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При запуске программы TFREMOTE необходимо провести ее конфи-
гурирование для того, чтобы через аппаратуру связи поддерживалась
работа с удаленной системой.  Это можно сделать, загрузив драйвер
и указав  в командной строке определенные параметры.  Перед пара-
метрами следует ввести знак дефиса ("-") или же  наклонную  черту
("/").

           Таблица C.1. Параметры командной строки при вызове
                        сервисной программы TFREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Параметр       Его действие
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-? или -h      Вызывает вспомогательную информацию

-rn<имямашины> Удаленное профилирование с использованием ЛВС

-rp1           Порт 1, (COM1) (используется по умолчанию)

-rp2           Порт 2, (COM2)

-rs1           Самая низкая скорость, 9600 бод

-rs2           Низкая скорость, 19200 бод

-rs3           Средняя скорость, 38400 бод

-rs4           Высокая скорость, 115000  бод  (используется  по
               умолчанию)
-w             Значения параметров заносятся в выполняемый файл
               программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Примечание: Для  того,  чтобы просмотреть весь перечень доступных
            параметров командной строки для TFREMOTE, в командной
            строке DOS следует ввести:

                          TFREMOTE -h

                       Настройка TFREMOTE

     Если сервисная программа TFREMOTE запускается без каких-либо
параметров командной строки,  то она использует принятые по умол-
чанию значения номера порта и скорости передачи, которые включены
в файл  программы TFREMOTE.EXE (порт  COM1  и  скорость  передачи
115000 бод,  если они не были модифицированы с помощью параметра
"-w").

     Параметры командной  строки  сервисной  программы   TFREMOTE
можно установить для постоянного использования,  записав их в вы-
полняемый файл сервисной программы TFREMOTE на диске.  Для  этого
необходимо задать в командной строке параметр "-w" в совокупности
с теми параметрами,  значения которых необходимо  установить  для
постоянного использования.  Сервисная программа TFREMOTE запраши-
вает имя выполняемой программы,  в которую должны  быть  занесены
заданные изменения; если указывается имя нового (несуществующего)
выполняемого файла,  то сервисная программа TFREMOTE создаст этот
файл. При  нажатии  клавиши  {Enter},  запись будет произведена в
настоящий момент загруженную программу (TFREMOTE.EXE).

     При работе в DOS версии 3.0 или более поздней,  то в систем-
ном приглашении  указывается  также маршрут и имя того файла,  из
которого запускается сервисная программа TFREMOTE.  Можно выбрать
данное имя (нажав клавишу {Enter}), или ввести новое имя выполня-
емого файла.  ( При работе в DOS версии 2.хх,  необходимо  задать
полный маршрут и имя файла выполняемой программы.)

     Например, на  удаленном  компьютере  в  командной строке DOS
вводится следующая команда:

     TFREMOTE -w -rs3 -rp2

В ответ на запрос введите имя программы,  которая должна быть мо-
дифицирована, например  tfremot2.exe.  Тогда  сервисная программа
TFREMOTE создаст драйвер удаленной машины с именем  TFREMOT2.EXE,
где  по умолчанию будут использоваться значение скорости,  равное
38400 бодам (параметр "-rs3") и порт COM2 (параметр "-rp2").

       ДРАЙВЕР СВЯЗИ С УДАЛЕННОЙ СИСТЕМОЙ В СРЕДЕ DOS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для того,  чтобы приступить к профилированию в удаленном ре-
жиме, в первую очередь на удаленном компьютере следует  загрузить
драйвер поддержки удаленного профилирования, а затем на локальной
системе загрузить программу TPROF.

     Перед запуском сервисной  программы  TFREMOTE  следует  убе-
диться, что на удаленной системе текущим каталогом является ката-
лог,  содержащий файлы прикладной программы. Это важно в силу то-
го,  что при запуске программы TPROF сервисная программа TFREMOTE
помещает профилируемую программу в текущую директорию.

     После загрузки TFREMOTE появляется лицензионное сообщение, а
затем сообщается  об  ожидании  запуска  Turbo  Profiler на другой
системе. Для прекращения работы и возврата в  среду  DOS  следует
нажать {Ctrl}{Break}.

Загрузка драйвера  удаленного профилирования через последователь-
ный порт

     При использовании  фиктивного  модема (null modem) для связи
между двумя компьютерами,  для установки скорости передачи данных
и связного  порта следует использовать параметры командной строки
-rs и -rp.

     Если в качестве последовательного  порта  удаленной  системы
используется  порт  COM1,  то  для  запуска  сервисной  программы
TFREMOTE введите с клавиатуры:

     TFREMOTE -rp1 -rs4

     Следует отметить, что данные значения являются значениями по
умолчанию, так вышеуказанная команда будет идентична следующей:

     TFREMOTE

     Если в  качестве  последовательного  порта удаленной системы
используется  порт  COM2,  то  для  запуска  сервисной  программы
TFREMOTE введите с клавиатуры:

     TFREMOTE -rp2 -rs4.

     Обе эти  команды  инициируют  связь между машинами на макси-
мальной скорости (115000 бод).  Эта скорость приемлема при работе
с большинством персональных компьютеров и кабелей.  Однако,  если
возникают сложности с передачей данных, то следует ознакомиться с
разделом "Параметры  командной  строки при вызове сервисной прог-
раммы TFREMOTE" настоящей главы,  где указывается,  как иницииро-
вать связь с меньшей скоростью.
     При работе на системе PS/2 следует воспользоваться  парамет-
ром командной строки -rs1.

Примечание: Возможно,   что   локальный  и  удаленный  компьютеры
используют различные порты для соединения фиктивных модемов (null
modem).  В этом случае связные последовательные порты двух систем
не совпадают.  Однако для поддержания  связи,  скорость  передачи
данных этих систем должна всегда совпадать.

              Организация удаленного профилирования
                   с помощью сетевого драйвера

     Если для связи двух систем используется ЛВС,  то при запуске
TFREMOTE следует указать параметр -rn. Например, при вводе следу-
ющей команды в командной строке DOS,  программа  TFREMOTE  загру-
зится с  использованием аппаратных средств ЛВС и задаст удаленной
системе имя remotelink:

     TFREMOTE -rnremotelink

     Если имя удаленной системы не указывается,  то  используется
имя по умолчанию REMOTE.  Более подробная информация о присвоении
имен удаленным системам содержится в разделе  "Связь  посредством
ЛВС" данного Приложения.

     ОРГАНИЗАЦИЯ СВЯЗИ С УДАЛЕННОЙ СИСТЕМОЙ В СРЕДЕ DOS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После загрузки  программы  TFREMOTE на удаленном компьютере,
на локальной системе следует запустить Turbo Profiler,  используя
параметры командной  строки,  соответствующие  типу  используемой
связи.

               Связь через последовательные порты

     Сервисные программы TPROF и TFREMOTE для задания скорости  и
номера  последовательного  порта  используют одинаковые параметры
командной строки:  для обеспечения качественной работы этих  сер-
висных  программ следует настроить их на одну и ту же скорость (с
помощью параметра "-rs").

     После загрузки  программы  TFREMOTE на удаленном компьютере,
для завершения организации связи с удаленной системой, на локаль-
ной системе  следует  запустить TPROF.  Для запуска системы Turbo
Profiler с использованием связи через последовательный порт  COM2
и скоростью передачи данных, равной 115000 бод, следует набрать

          TPROF -rp2 имя_файла

     Если на  удаленной  системе нет программы с именем "имя_фай-
ла", то Turbo Profiler скопирует ее, используя межмашинную связь.
Более подробная  информация  о загрузке программ с использованием
межмашинной связи содержится в разделе "Загрузка программ на уда-
ленной системе" данного Приложения.

     Если межмашинная связь успешно инициирована, то на удаленной
системе появляется сообщение "Link established" ("Связь  установ-
лен"), а  индикатор на локальной системе отображает "READY" ("Го-
тов"). Затем на локальной системе появляется обычный экран систе-
мы Turbo Profiler.

     Вместо параметров  -rs и -rp можно использовать параметр ко-
мандной строки -r, который инициирует удаленную связь с использо-
ванием  установленных  по  умолчанию  значений  скорости и номера
последовательного порта.  До тех пор, пока эти стандартные значе-
ния параметров не будут изменены с помощью программы TFINST,  па-
раметр -r задает работу с портом COM1 при скорости 115000 бод.

                         Связь через ЛВС

     Для инициализации связи через ЛВС, TPROF использует параметр
командной строки -rn.  Однако, используемой программой TPROF син-
таксис отличается от синтаксиса программы TFREMOTE.

     Если параметр  -rn  используется программой TPROF,  то можно
указать два дополнительных параметра: имя локальной системы и имя
удаленной системы,  разделенный  символом  точка  с  запятой (;).
Поскольку оба параметра необязательны,  параметр -rn в  командной
строке можно указать четырьмя способами:

     TPROF -rn имя_файла

     TPROF -rnLOCAL1 имя_файла

     TPROF -rn;REMOTE1 имя_файла

     TPROF -rnLOCAL1;REMOTE1 имя_файла

     В первой  команде  для  наименования  локальной  и удаленной
систем используются имена по умолчанию,  соответственно  LOCAL  и
REMOTE.  Во  второй  команде  локальной системе присваивается имя
LOCAL1,  а для удаленной системе используется  имя  по  умолчанию
(REMOTE).  В  третьей  команде для локальной системы используется
имя по умолчанию (LOCAL),  а удаленной системе присваивается  имя
REMOTE1. Наконец, в четвертой команде имена присваиваются как ло-
кальной, так и удаленной системам.

     Инициализация связи длится менее 15 секунд после  ввода  ко-
манды запуска Turbo Profiler.

Примечание: Если в сетевой среде удаленное профилирование исполь-
            зуется только одним пользователем,  можно не присваи-
            вать имена локальной и удаленной систем. Однако, если
            в сети удаленное профилирование используется несколь-
            кими  пользователями,  то  имена необходимо присвоить
            обеим системам.

       УДАЛЕННОЕ ПРОФИЛИРОВАНИЕ ПРОГРАММ СРЕДЫ WINDOWS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для удаленного  профилирования  прикладной  программы  среды
Windows, необходимо на одном компьютере запустить Windows,  прог-
рамму  WREMOTE  и  прикладную  программу,  а  на  другом - Turbo
Profiler.  В данном приложении компьютер,  на котором загружается
Windows, прикладная  программа  и программа WREMOTE,  будет назы-
ваться удаленным,  а  компьютер,  на  котором  загружается  Turbo
Profiler - локальным.

                 Установка удаленной системы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Скопируйте драйвер   поддержки   удаленного   профилирования
WREMOTE.EXE, программу конфигурации WRSETUP.EXE и необходимые для
профилируемой программы файлы на удаленную компьютерную  систему.
В число этих файлов могут включаться файлы входных данных,  файлы
конфигурации, файлы помощи,  файлы DLL среды Windows и так далее.
По желанию на удаленную систему можно скопировать саму прикладную
программу. Однако,  при необходимости, ее может автоматически пе-
ренести  сама система Turbo Profiler,  используя средства связи с
удаленным компьютером.

     Для переноса  на  удаленный  компьютер  файлов  могут   быть
использованы гибкие диски или сервисная программа переноса файлов
на удаленный  компьютер  -  программа  TDRF  ("TRDF  Remote  File
Transfer  Utility").  Сервисная  программа  TDRF описана в файлах
вспомогательной информации.

                 Настройка программы WREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     До первого запуска программы  WREMOTE  необходимо  выполнить
программу WRSETUP  для  определения  параметров связи с удаленной
системой. Если программа WRSETUP выполняется в первый раз, то для
конфигурации системы в группе прикладных программ системы Borland
C++, следует  использовать  команду  File|New  программы  Program
Manager системы  Windows  (то же самое можно сделать с программой
WREMOTE.EXE).

     После запуска  WRSETUP  появится  окно,  содержащее  команды
File, Settings  и Help.  При выборе Settings вызывается следующее
окно: (рисунок см. в оригинальном руководстве).

     Рис. C.1  Главное  окно  программы  WRSETUP  и  блок диалога
               Settings.

     Конфигурирование связи через последовательные порты

     Если используется связь через последовательные порты, следу-
ет выбрать  псевдокнопку  Serial  и определить  скорость передачи
данных, а также последовательный порт, соответствующий используе-
мой аппаратуре. Значениями по умолчанию являются 19200 бод и порт
COM1.

              Конфигурирование связи через ЛВС

     Если используется связь посредством ЛВС,  то следует выбрать
псевдокнопку Network и определить имя удаленной системы в тексто-
вом блоке "Network Remote Name".  По умолчанию  именем  удаленной
системы  является  REMOTE.  Более  подробная информация об именах
удаленных  систем  содержится  в   разделе   "Организация   связи
посредством ЛВС".

     В текстовом  блоке "Starting Directory" введите путь доступа
к каталогу,  в котором система Turbo Profiler будет  вести  поиск
профилируемой прикладной  программы.  Для  передачи управления из
программы WREMOTE среде Windows, следует завершить работу с Turbo
Profiler на  локальной  машине  и выбрать "Quit When Host Quits".
При использовании больших скоростей передачи  данных  (38400  или
115000 бод)  установите  блок  "Disable Clock Interrupts" в режим
"Разрешить". Это поможет  программам  WREMOTE  и  Turbo  Profiler
установить связь в среде Windows.

     После определения параметров и закрытия окна WRSETUP,  прог-
рамма  WRSETUP сохранит установленные значения параметров в файле
TDW.INI в пользовательском каталоге среды Windows.  Как  и  любой
файл с расширением .INI, его можно непосредственно редактировать,
используя любой текстовый процессор,  который  работает  с  ASCII
текстом.  В  файле TDW.INI,  содержание которого приводится ниже,
устанавливается скорость передачи данных  19200  бод  через  порт
COM2 и отменой обработки прерываний таймера,  причем при заверше-
нии работы Turbo Profiler управление передается среде Windows:

     [WRemote]
     BaudRate=2
     Port=2
     Quit=1
     Clock=1
имечание:

   Если вы   установите   WREMOTE,  используя  предыдущую  версию
   WRSETUP,  то можете скопировать старые установки WREMOTE.INI в
   TDW.INI. не забудьте включить заголовок секции [WRemote].

        Параметры командной строки программы WREMOTE

     Для изменения значений по умолчанию и значений,  указанных в
файле WREMOTE.INI,  можно использовать параметры командной строки
при запуске WREMOTE. Перед параметрами следует ввести знак дефиса
("-") или же наклонную черту ("/").

           Таблица C.2. Параметры командной строки при загрузке
                        программы WREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Параметр       Его действие
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-с<имя_файла>  Файл "имя_файла" используется как файл конфигурации
               (файл с расширением .INI)
-d<имя_кат>    Каталог "имя_кат" используется в качестве исходного

-rc0           Обработка прерываний таймера разрешена
-rc1           Отмена обработки прерываний таймера

-rn<имямашины> Удаленное профилирование с использованием ЛВС

-rp1           Порт 1, (COM1) (используется по умолчанию)
-rp2           Порт 2, (COM2)

-rq0           Не завершать работу при выходе из Turbo Profiler
-rq1           Завершить работу при выходе из Turbo Profiler

-rs1           Самая низкая скорость, 9600 бод
-rs2           Низкая скорость, 19200 бод
-rs3           Средняя скорость, 38400 бод
-rs4           Высокая скорость, 115000  бод  (используется  по
               умолчанию)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     ДРАЙВЕР СВЯЗИ С УДАЛЕННОЙ СИСТЕМОЙ В СРЕДЕ WINDOWS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После запуска программы WREMOTE из среды  Windows,  рядом  с
курсором мыши появится пиктограмма песочных часов, сообщая о том,
что есть готовность для запуска системы Turbo Profiler на  другом
компьютере.

     Для прекращения  работы  во  время  ожидания запуска TPROF
следует нажать {Ctrl}{Break} на удаленной машине.

     Инициализация связи с удаленной машиной в среде Windows

     Для запуска  Turbo  Profiler на локальной машине,  используя
средства связи с удаленной машиной,  в командной строке  при  за-
пуске TPROF следует указать параметр -w. Параметр -w указывает на
то,  что  профилируемая  программа  является   программой   среды
Windows.

Примечание: Параметр -w, используемый при запуске Turbo Profiler,
совершенно отличается от параметра -w,  используемого при запуске
программы TFREMOTE  (там  он  определяет необходимость сохранения
значений параметров на диске).

                Связь через последовательный порт

     При использовании  фиктивного  модема (null modem) для связи
между двумя компьютерами,  для установки скорости передачи данных
и связного  порта следует использовать параметры командной строки
-rs и -rp.

     Для устойчивой работы, в программах WREMOTE и Turbo Profiler
должна быть установлена идентичная скорость передачи данных.  Для
определения скорости передачи данных  для  Turbo  Profiler  можно
использовать параметр командной строки -rs,  или же можно исполь-
зовать параметр -r организации связи с использованием  параметров
по умолчанию. До тех пор, пока значения по умолчанию не будут из-
менены с помощью программы TFINST,  параметр -r  определяет  ско-
рость передачи  данных  равной 115000 бод и последовательный порт
COM1. Более подробная информация о  параметрах  командной  строки
содержится в параграфе "Связь через последовательный порт" разде-
ла "Удаленное профилирование в среде DOS".

                         Связь через ЛВС

     Если для связи двух систем используется ЛВС,  то при запуске
TPROF следует указать параметр -rn. Например, при вводе следующей
команды в командной  строке  DOS,  Turbo  Profiler  загрузится  с
использованием  аппаратных средств ЛВС:

     TPROF -rs2 -w myprog

     Этой командой  устанавливается  связь через последовательный
порт по умолчанию (обычно COM1)  со  скоростью  передачи  данных,
равной 19200  бод,  и  загружается  прикладная программа с именем
"myprog", если она не была загружена ранее.  Более подробная  ин-
формация о  параметре -rn командной строки содержится в параграфе
"Связь через ЛВС" раздела "Удаленное профилирование в среде DOS".

    При запуске Turbo Profiler на локальной машине появляется ли-
цензионное сообщение, информация о версии программы, а также сле-
дующее сообщение:

     Waiting for handshake from remote driver (ctrl-break to quit)
     (Ожидается ответ  от  драйвера удаленной системы (для отмены
      нажмите {Ctrl}{Break))

     Во время организации  связи  на  удаленной  машине  рядом  с
курсором мыши появляется пиктограмма песочных часов. При успешной
организации связи эта пиктограмма исчезает и на локальной  машине
отображается нормальный экран системы Turbo Profiler.  Если связь
не устанавливается,  для выхода из системы Turbo Profiler нажмите
{Ctrl}{Break}.

             Загрузка программы в удаленную систему

     Если имя  файла  указывается  в качестве параметра командной
строки загрузки файла TPROF, или же новый файл для профилирования
загружается с помощью команды File|Open, Turbo Profiler автомати-
чески проверяет необходимость пересылки прикладной  программы  на
удаленную систему.

     Программа Turbo Profiler тщательно анализирует необходимость
загрузки профилируемой программы на диск удаленной машины. Снача-
ла проверяется наличие программы на удаленной системе. Если прог-
рамма там есть,  то Turbo Profiler проверяет датe и время получе-
ния тех копий программы, которые находятся на локальном компьюте-
ре и на удаленном компьютере.  Если копия на локальном компьютере
оказывается  более поздней (более новой) по сравнению с копией на
удаленном компьютере,  программа Turbo  Profiler  "предполагает",
что программа была рекомпилирована или перекомпонована, и пересы-
лает ее через межмашинную связь.
     Если задана самая высокая скорость передачи данных, передача
осуществляется со скоростью примерно 10 Кбайт в секунду.  Типовая
программа  размером в 60 Кбайт передается приблизительно за 6 се-
кунд,  поэтому не следует тревожиться в случае, если при загрузке
новой программы  возникает незначительная задержка.  Чтобы проин-
формировать о ходе  процесса  перекачки  файла  программой  Turbo
Profiler, экран на удаленном компьютере отображает число передан-
ных байтов файла.

       СЕАНС РАБОТЫ В РЕЖИМЕ УДАЛЕННОГО ПРОФИЛИРОВАНИЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При запуске TPROF в режиме  удаленного  профилирования  (при
использовании TFREMOTE и WREMOTE), команды системы Turbo Profiler
будут работать точно так же,  как и при профилировании  на  одной
машине; ничего нового знать не нужно.

     Поскольку профилируемая  программа в действительности выпол-
няется на удаленном компьютере,  все операции вывода на экран или
ввода  с  клавиатуры в этой программе в действительности реализу-
ются на удаленной машине. Команда Window|User Screen (Окно|Экран-
ный кадр  пользователя) при работе в режиме удаленного профилиро-
вания не действует.

     Тип центрального процессора удаленного  компьютера  указыва-
ется  в качестве составной части заголовка окна центрального про-
цессора (CPU),  причем впереди стоит слово "REMOTE"  (дистанцион-
ный).

     Для пересылки файлов на удаленную систему при работе в среде
системы Turbo Profiler необходимо выйти в DOS  (выберите  команду
File|DOS Shell (Файл|Оболочка DOS)),  а затем воспользуйтесь сер-
висной программой TDRF для выполнения файловых операций  на  уда-
ленной системе.  Для возврата в систему Turbo Profiler в ответ на
запрос DOS наберите  EXIT  (Выход)  и  продолжите  профилирование
прикладной программы.

                    ПОИСК НЕИСПРАВНОСТЕЙ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если у  возникают  какие-либо проблемы с организацией межма-
шинной связи, следует применить следующие методы поиска неисправ-
ностей:

*  Проверьте соединения кабелей.

*  Поверьте  корректность  выбора  последовательных портов и
   подсоединения кабелей

*  Пытайтесь  установить  связь  на   самой   низкой   скорости
   (воспользуйтесь параметром  командной  строки -rs) до тех пор,
   пока связь не будет установлена.

*  Некоторые комбинации кабелей и аппаратуры не всегда должным об-
   разом работают на самой высокой скорости.  Если можно осущест-
   влять удаленное профилирование только  на  более  низкой  ско-
   рости, то следует попытаться установить другой кабель или дру-
   гие компьютеры.

*  Если при профилировании программы среды Windows связь не  уста-
   навливается при любых значениях скорости передачи данных,  то с
   помощью программы WRSETUP отмените обработку прерываний таймера
   и попытайтесь  установить  связь  при скорости передачи данных,
   равной 9600 бод.  При успешной работе, попытайтесь использовать
   более высокие скорости.

           Сообщения сервисной программы TFREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Ниже приводится перечень сообщений,  которые могут появиться
при работе с сервисной программой TFREMOTE.

 bytes downloaded
     (По линии связи загружено  байт)
          Сервисная программа TFREMOTE пересылает файл на удален-
          ную  компьютерную систему.  Данное сообщение отображает
          процесс переноса файла. При самой высокой скорости меж-
          машинной связи (115000 бод) скорость передачи составля-
          ет приблизительно 10 Кбайт в секунду.

Can't create file
     (Невозможно создание файла)
          Сервисная программа TFREMOTE не может создать  файл  на
          удаленной  компьютерной  системе.  Это  сообщение может
          возникать в том случае, если на диске удаленной системы
          обнаруживается нехватка места для того, чтобы перенести
          выполняемый файл по межмашинной связи.

Can't modify exe file
     (Модификация выполняемого файла невозможна)
          В качестве имени файла,  который  должен  подвергнуться
          модификации, был указан файл, не являющийся действующей
          копией сервисной программы TFREMOTE. С помощью парамет-
          ра  "-w"  может осуществляться модификация только копии
          TFREMOTE.

Can't open exe file to modify
     (Невозможно открытие выполняемого файла для его модификации)
          Сервисная программа TFREMOTE не может открыть для моди-
          фикации файл с заданным Вами именем.  Вероятно,  Вы не-
          верно указали имя файла или задали имя  несуществующего
          файла.

Download complete
     (Загрузка по межмашинной связи завершена)
          Перенос файла  на  систему,  на  которой находится сер-
          висная программа TFREMOTE, был успешно завершен.

Download failed, write error on disk
     (При загрузке  по линии связи произошел сбой;  ошибка записи
     на диске)
          Сервисная программа TFREMOTE не смогла записать на диск
          часть полученного файла. Обычно это сообщение возникает
          при  заполнении  диска.  Прежде чем сервисная программа
          TFREMOTE сможет успешно загрузить по линии связи  файл,
          Вам следует удалить какие-либо файлы.

Enter program file name to modify
     (Введите имя программного файла,  который должен  быть  под-
     вергнут модификации)
          Если работа происходит под управлением DOS  версии  3.0
          или  более поздней,  то в запросе указывается маршрут и
          имя файла,  из которого была загружена сервисная  прог-
          рамма TFREMOTE. Вы можете принять существующее имя (на-
          жав клавишу {Enter}), или ввести новое имя выполняемого
          файла.

          Если работа происходит под управлением DOS версии 2.хх,
          то необходимо задать полный маршрут и имя файла  выпол-
          няемой программы.

Interrupted
     (Прервана)
          Вы нажали комбинацию клавиш {Ctrl}{Break} в период ожи-
          дания установления связи с другой  компьютерной  систе-
          мой.

Invalid command-line option
     (Неверный параметр командной строки)
          При запуске сервисной программы TDRF из командной стро-
          ки DOS Вы задали неверный параметр командной строки.

Link broken
     (Связь разорвана)
          Программа, которая взаимодействовала с сервисной  прог-
          раммой TFREMOTE,  прекратила работу и осуществила возв-
          рат в DOS.

Link estalished
     (Связь установлена)
          Программа на другой системе  только  что  начала  обмен
          данными с сервисной программой TFREMOTE.

Loading program <имя> from disk
     (Загрузка программы <имя> с диска)
          Система Turbo  Profiler  запустила  сервисную программу
          TFREMOTE для загрузки программы с диска в память в  це-
          лях подготовки к профилированию.

No network present
     (Сеть отсутствует)
     TFREMOTE не  смогла обнаружить сеть,  совместимую с NETBIOS.
     Убедитесь, что система NETBIOS (версия 3.0 или  последующая)
     загружена и подключена к сети.

Program load filed, EXEC failure
     (Произошло прекращение  загрузки  программы,  сбой  операции
      EXEC)
          Система DOS не смогла загрузить программу в память. Это
          может  возникать в том случае,  если файл программы был
          поврежден или усечен. Удалите файл с программой с диска
          удаленной  системы:  в  результате  этого система Turbo
          Profiler посылает по линии связи новую копию.  Если это
          сообщение возникает повторно после удаления файла, сле-
          дует произвести повторную компоновку программы  на  ло-
          кальной  системе  с помощью программы TLINK и повторить
          попытку.

Program load failed; not enough memory
     (Сбой при загрузке программы: недостаточно памяти)
          На удаленной системе не хватает  свободной  памяти  для
          загрузки той программы, которую Вы собираетесь профили-
          ровать. Эта ситуация возникает только в случае обработ-
          ки очень больших программ, поскольку сервисной програм-
          ме TFREMOTE для работы требуется только около 15  Кбайт
          памяти.

Program load failed; program not found
     (Сбой при загрузке программы: программа не найдена)
          Сервисная программа TFREMOTE не смогла обнаружить прог-
          рамму на своем диске.  Эта ситуация никогда  не  должна
          возникать, поскольку система Turbo Profiler осуществля-
          ет перенос программы по линии связи на удаленную систе-
          му,  если сервисная программа TFREMOTE не может ее най-
          ти.

Program load successful
     (Загрузка программы прошла успешно)
          Сервисная программа TFREMOTE завершила  загрузку  прог-
          раммы,  которая  должна  профилироваться системой Turbo
          Profiler.

Reading file <имя> from Turbo Profiler
     (Считывается файл <имя> из Turbo Profiler)
          Это сообщение появляется на экране  удаленной  системы,
          чтобы  можно  было узнать,  когда удаленный файл послан
          системой Turbo Profiler.

Unknown request: <сообщение>
     (Неизвестный запрос: <сообщение>)
          Сервисная программа  TFREMOTE  получила  от   локальной
          системы  (где  выполняется Turbo Profiler) неправильный
          запрос. Если появляется  данное  сообщение,  проверьте,
          находится  ли  связывающий  кабель в нормальном рабочем
          состоянии.  Если появление подобной ошибки повторяется,
          то  попытайтесь  уменьшить скорость осуществления связи
          (воспользуйтесь параметром командной строки -rs).

Waiting for handshake (press Ctrl-Break to quit)
     (Ожидается подтверждение  связи (для выхода нажмите клавиши
     {Ctrl}{Break}))
          Сервисная программа  TFREMOTE  начала работу и ожидает,
          пока программа на локальной системе начнет с ней  обмен
          данными.  Для  того,  чтобы возвратиться в DOS до того,
          как другая система  начнет  взаимодействие,  необходимо
          нажать комбинацию клавиш {Ctrl}{Break}.

                 Сообщения программы WREMOTE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Ниже приводится перечень сообщений,  которые могут появиться
при работе с программой WREMOTE.

Can't find configuration file
     (Невозможно найти файл конфигурации)
          После параметра -c указано имя несуществующего файла.

Can't load WINDEBUG.DLL
     (Невозможно загрузить файл WINDEBUG.DLL)
          Файл библиотеки   динамических   связей    WINDEBUG.DLL
          отсутствует в текущем каталоге. Эта библиотека требуется
          для запуска WREMOTE.

Can't open COMx serial port
     (Невозможно использовать последовательный порт COMx)
           Программа Wremote пытается использовать порт COM,  ко-
           торый либо используется, либо отсутствует.

Invalid switch
     (Неверный ключ)
          В командной строке запуска WREMOTE указан  некорректный
          параметр.

No network present
     (Сеть отсутствует)
     WREMOTE не  смогла обнаружить сеть,  совместимую с NETBIOS.
     Убедитесь, что система NETBIOS (версия 3.0 или  последующая)
     загружена и подключена к сети.

     ПРИЛОЖЕНИЕ D. TURBO PROFILER ДЛЯ СИСТЕМЫ WINDOWS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Turbo Profiler для среды Windows (TPROFW) предоставляет воз-
можность профилировать  программы,  которые написаны для работы с
операционной оболочкой Microsoft Windows версии 3.0 и последующих
версий. TPROFW загружается из среды Windows на том же компьютере,
что и  профилируемая  программа  и  позволяет  переходить   между
собственным экраном  и  экраном прикладной программы так же,  как
это происходит при работе системы Turbo Profiler.

     Профилирование в среде Windows во многом напоминает профили-
рование в  среде  DOS,  за исключением того,  что предоставляется
доступ к информации,  характерной для прикладных программ системы
Windows, такой как:

     * сообщениям,  полученным и отправленным через окна приклад-
       ной программы

     * полному  списку  модулей,  загруженных  системой   Windows
       (включая библиотеки динамической связи)

     * профилированию библиотек динамической связи (DLL)

     TPROFW может работать в среде Windows, если она функциониру-
ет в стандартном режиме или расширенном  режиме  386  процессора,
что предполагает  наличие  в  компьютере процессора 80286 или его
последующих модификаций и по крайней мере  1  Мбайта  оперативной
памяти.

     TPROFW может  работать  в  стандартных  графических режимах:
CGA, EGA,  VGA и  с  монохромным  адаптером  типа  Hercules.  При
использовании нестандартного  режима  следует  до запуска системы
Windows и TPROFW перейти в один из стандартных режимов.  При  по-
пытке работы  с TPROFW в нестандартном режиме не будет предостав-
ляться возможность перехода между экранами прикладной программы и
экраном TPROFW.

                     Видеоадаптеры типа SVGA

     Возможность работы с адаптером типа SuperVGA может быть пре-
доставлена при  использовании   библиотеки   динамической   связи
TDVIDEO.DLL. Вместе  с  программой TPROFW поставляются библиотеки
динамической связи,  которые обеспечивают работу с различными ви-
деоадаптерами типа  SuperVGA  (описание  дано в файле README.DAT,
который находится на дистрибутивной  дискете).  Для  того,  чтобы
воспользоваться одной  из  этих  библиотек  при  работе  с TPROFW
следует скопировать ее в тот же каталог, где находится TPROFW.EXE
и переименовать  ее  на  TDVIDEO.DLL.  При отсутствии библиотеки,
которая подходит  к   вашему   адаптеру   обращайтесь   в   отдел
технического сервиса  фирмы Borland.  Подробная информация о том,
как связаться с фирмой дана в начале данного руководства.

     Как и система Turbo Profiler, TPROFW может обеспечить работу
со вторым  монитором,  подключенным  к  компьютеру,  предоставляя
возможность следить за TPROFW на одном экране,  а  за  прикладной
программой -  на другом.  Данный режим активизируется при запуске
TPROFW с ключом  -d0  или  при  переводе  параметра  User  Screen
Updating (Настройка  экрана  пользователя)  в режим Other display
(Второй дисплей) с помощью программы TFINST.

                      УСТАНОВКА  TPROFW
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При установке системы Turbo Profiler на компьютер, программа
установки записывает два файла,  относящихся к системе Windows, в
тот же каталог, что и файлы системы Turbo Profiler:

     * TPROFW.EXE, то есть программу TPROFW
     * TFWHELP.TFH,  то есть файлы вспомогательной информации для
       программы TPROFW

     Во время процесса установки создается блок запуска программы
TPROFW, который включается в группу программ Borland C++  системы
Windows Program  Manager  (Обработчик  программ  среды  Windows).
Программа TPROFW запускается при выборе ее блока запуска таким же
образом, что и остальные прикладные программы среды Windows.

                    Установка TDDEBUG.386
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Файл TDDEBUG.386, находящийся на дистрибутивной дискете, вы-
полняет ту же роль,  что и файл WINDEBUG.386 системы Windows SDK,
однако лучше  выполняет  обработку  нажатия   комбинации   клавиш
{Ctrl}{Alt}{SysRq} (которая  используется для останова выполнения
прикладной программы и возврата в программу TPROFW).

     Программа установки должна скопировать  этот  файл  на  вин-
честер и  изменить файл SYSTEM.INI системы Windows таким образом,
чтобы она загружала файл TDDEBUG.386 вместо  файла  WINDEBUG.386.
Если по  каким-то причинам программа установки не скопирует этот
файл, то это придется сделать вручную:

     1. Программа установки  должна  скопировать  данный  файл  с
        дистрибутивной дискеты на винчестер.  Стандартным катало-
        гом для данного файла является C:\TPROF\BIN.  При копиро-
        вании данного  файла  в  другой  каталог следует изменить
        стандартный каталог на новый.

     2. С  помощью  редактора  следует  открыть файл SYSTEM.INI и
        найти заголовок [386enh], после которого добавить следую-
        щую строку:
                    device=c:\tprof\bin\tddebug.386

     3. Если там окажется строка,  обуславливающая загрузку файла
        WINDEBUG.386, с помощью символа ";" оформите эту строку в
        качестве комментария,  либо удалите ее.  (Нельзя одновре-
        менно загружать файлы TDDEBUG.386 и WINDEBUG.386).
        Например, если   WINDEBUG.386   загружается  из  каталога
        C:\WINDOWS, откомментированная строка будет иметь следую-
        щий вид:
                 ;device=c:\windows\windebug.386

                  КОНФИГУРИРОВАНИЕ  TPROFW
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Как и Turbo Profiler,  TPROFW  можно  конфигурировать  двумя
способами: с  помощью  параметров  командной строки или с помощью
программы TFINST.

          Использование параметров командной строки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Конфигурацию TPROFW можно определить используя различные па-
раметры командной строки,  указывая их  вслед  за  необязательным
именем прикладной  программы.  Перед  именем программы может быть
указан путь доступа к программе.

     Поскольку TPROFW является программой среды Windows, парамет-
ры командной  строки  можно  указать  используя  команду File|Run
системы Program Manager  или  используя  команду  File|Properties
той же  системы  для  изменения  принадлежностей командной строки
блока запуска программы TPROFW.  TPROFW можно также запустить  из
командной строки среды DOS. После команды запуска Windows укажите
команду запуска TPROFW,  в которую можно  дополнительно  включить
требуемые параметры  или имя прикладной программы (вместе с пара-
метрами или без них).

     Синтаксис командной строки запуска TPROFW должен быть следу-
ющим:
            TPROFW [параметры]  [имя_программы [имя_программы]]

     В таблице D.1 приводятся суммарный список параметров команд-
ной строки запуска TPROFW:

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Параметр                         Действие параметра
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

-?,-h                      Выводит вспомагательную информацию

-b                         Загружает TPROFW в режиме командного
                           файла

-c<файл>                   Загружает файл конфигурации с именем
                           "файл".

-do                        Запускает TPROFW на втором дисплее.

-ds                        Организует работу     с      экранами
                           посредством выгрузки страниц на диск.

-р                         Разрешает использование мыши. Если в
                           системе Windows  использование мыши не
                           предусматривается, то в TPROFW ее так-
                           же нельзя использовать,  а параметр -p
                           не возымеет действия.

-sc                        Приводит к тому, что при  вводе имен
                           символов не    учитывается   регистр
                           (верхний  или  нижний),  в   котором
                           набираются эти имена.

-sddir[;dir...]            Определяет один или несколько  катало-
                           гов для поиска символьных имен.

-tdir                      Определяет каталог загрузки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

       Таблица D.1 Параметры командной строки запуска TPROFW

Примечание: Параметр  командной  строки  -t  применяется только с
            TPROFW. Данный параметр изменяет каталог, из которого
            TPROFW загружается  и  в  которой  TPROFW ведет поиск
            файла конфигурации и файлов с расширением  .EXE,  для
            которых не указан полный путь доступа. Синтаксис
            таков:
                        -tимя_каталога

            Данным параметром можно установить только один каталог
            загрузки. При многократном вводе данной команды в од-
            ной строке, TPROFW использует только последнюю из них.

          Конфигурирование TPROFW с помощью TFINST
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для того,  чтобы  обработать  TPROFW  с  помощью   программы
TFINST, последнюю следует запустить с параметром командной строки
-w. TFINST для программы TPROFW  работает  идентично  TFINST  для
Turbo Profiler,  за исключением того,  что файлом конфигурации по
умолчанию является файл TPCONFIG.TFW и  введено  несколько  новых
параметров командной строки (Описание параметров командной строки
дано в предыдущем параграфе).  Подробное описание работы с  прог-
раммой TFINST дано в Приложении B.

                  ОПИСАНИЕ РАБОТЫ С TPROFW
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После загрузки TPROFW экран  остается  в  алфавитно-цифровом
режиме, а  не  в  графическом режиме среды Windows.  В отличие от
других прикладных программ среды Windows программу TPROFW  нельзя
оставить фоновом режиме и переключиться на другую программу с по-
мощью комбинаций клавиш {Alt}{Esc} и  {Ctrl}{Esc}.  Однако,  если
профилируемая  программа находится в активном состоянии (курсор в
одном из ее окон активен),  то для перехода  в  другие  программы
можно использовать  эти  комбинации  клавиш  или  же  манипулятор
"мышь".

Примечание: При использовании комбинации клавиш  {Ctrl}{Esc}  для
выхода из прикладной программы,  обрабатываемой TPROFW,  в списке
выполняемых программ появится имя данной прикладной программы.  В
этом списке  никогда не появится имя TPROFW,  поскольку TPROFW не
является обычной программой среды Windows,  которую  можно  пере-
вести в фоновый режим работы.

     Профилирование при  помощи TPROFW весьма напоминает профили-
рование с помощью системы Turbo Profiler.  Однако, существуют не-
которые отличия:

     * Переход  из  прикладной  программы в TPROFW осуществляется
       при нажатии  комбинации  клавиш  {Ctrl}{Alt}{SysRq}.   Эта
       функция идентична нажатию комбинации {Ctrl}{Break} для пе-
       рехода из прикладной программы среды DOS в Turbo Profiler,
       за исключением  того,  что  прикладная программа среды DOS
       выгружается, а прикладная программа среды Windows приоста-
       навливается.

     * По возможности,  прикладную программу следует выполнять до
       ее логического  завершения  или  же  использовать  команду
       System для выхода из нее до завершения работы с TPROFW или
       до загрузки следующей профилируемой программы.  При некор-
       ректном  выходе  из  прикладной  программы  среды  Windows
       используемые ей машинные ресурсы не будут освобождены, что
       может  вызвать  трудности для выполнения TPROFW или других
       программ.

     * Команда DOS Shell меню File не работает,  поскольку TPROFW
       не работает в среде DOS.

           Профилирование процедур системы Windows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     TPROFW отслеживает  подпрограммы  внутри  процедур   системы
Windows, отслеживая типы сообщений,  вызываемые подпрограммой,  а
также сообщения,  передаваемые процедурам.  До того, как они будут
отслеживаться, необходимо сначала указать то, что маркер фрагмен-
та отмечает процедуру системы Windows.  Указать это можно  с  по-
мощью команды  Operation локального меню окна "Module" ("Модуль")
или с помощью команды Option локального меню окна "Areas" ("Фраг-
менты").

Блок диалога "Window Procedure" ("Процедура системы Windows")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После того,  как маркер фрагмента будет определен как маркер
процедуры системы Windows, необходимо определить типы отслеживае-
мых процедур и сами процедуры.  При выборе  Messages  (Сообщение)
либо в команде Operation локального меню окна "Module" ("Модуль")
либо в команде Option локального меню окна "Areas" ("Фрагменты"),
появится блок  диалога  "Window  Procedure"  ("Процедура  системы
Windows").

     Рис. D.1 Блок диалога "Window Procedure" ("Процедура системы
              Windows")

     При помощи  блока  диалога  "Window  Procedure"  ("Процедура
системы Windows")  можно  отобрать  типы  отслеживаемых  в данном
фрагменте процедур и сами процедуры. По умолчанию TPROFW отслежи-
вает все типы сообщений.

     В блоке   диалога  "Window  Procedure"  ("Процедура  системы
Windows") используются следующие  блоки  параметров  и  текстовые
блоки:

     * Блок списков Window Message (Сообщения Windows),  в кото-
       ром отображаются отобранные сообщения Windows.

     * Текстовый блок Message Name (Имя Сообщения),  где указыва-
       ется имя сообщения или его номер. Для того, чтобы добавить
       определенное сообщение в список Window Message  (Сообщения
       Windows) следует  использовать  команду Add (Добавить).  В
       именах сообщений Windows распознается регистр символов.

       Turbo Profiler обрабатывает только сообщения, имена которых
       начинаются на "WM_".  Для того,  чтобы отслеживать  другие
       сообщения, необходимо   указать  номер  сообщения  (номера
       сообщений можно узнать,  просмотрев файлы исходных текстов
       прикладной  программы или заголовки подключаемых (include)
       файлов.

     * Команда  Delete  (удалить)  удаляет выбранное сообщение из
       блока Window Message (Сообщения Windows).

     * Команда Remove All (Удалить все)  удаляет  все  отобранные
       сообщения из блока Window Message (Сообщения Windows). При
       выборе данной команды из блока Window  Message  (Сообщения
       Windows) удаляются все сообщения.

     * Команда Add All (Добавить все) отбирает все сообщения, ко-
       торые начинаются с "WM_". После выбора данной команды каж-
       дое сообщение отображается в блоке Window Message (Сообще-
       ния Windows).  Поскольку при этом отбирается  очень  много
       сообщений, следует сузить круг,  указав только необходимые
       типы сообщений.

Примечание: Перед выбором команды Add All (Добавить все)  необхо-
            димо убедиться  в  том,  что  параметру  "Max Windows
            Messages" ("Максимальное  число  сообщений  Windows")
            (которое   вызывается  командой  Statistics|Profiling
            Options    (Статистика|Параметры     профилирования))
            присвоенно значение, соответствующее числу отобранных
            сообщений.

            При выборе всех типов сообщений будет отобрано  около
            140 сообщений типа "WM_".

     * Add (добавить) добавляет сообщения,  указанные в текстовом
       блоке Message Name (Имя Сообщения) в список Window Message
       (Сообщения Windows).

     * Блоки  параметров  Message  Classes  (Типы сообщений) пре-
       доставляют возможность отобрать определенные типы  сообще-
       ний, за которыми следует следить. При выборе определенного
       типа сообщений,  отслеживаются все сообщения  этого  типа,
       начинающиеся на "WM_".

     В таблице D.2 дано описание типов сообщений Windows.

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     Тип сообщений           Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     All Messages      Все сообщения, начинающиеся с "WM_".

     Mouse             Сообщения, отражающие работу с "мышью"
                       (например, WM_LBUTTONDOWN и WM_MOUSEMOVE)

     Window            Сообщения обработчика окон (например,
                       WM_PAINT и WM_CREATE).

     Input             Сообщения, генерируемые при вводе с
                       клавиатуры или  при  работе пользователя с
                       системным меню,  блоком масштаба и  блоком
                       прокрутки (например, WM_KEYDOWN).

     System            Сообщения,  генерируемые  при изменении
                       системных характеристик (например,
                       WM_FONTCHANGE, WM_SPOOLERSTATUS).

     Initialization    Сообщения, генерируемые при создании
                       прикладной программой блока диалога или
                       окна (например, WM_INITDIALOG,
                       WM_INITMENU).

     Clipboard         Сообщения, генерируемые при попытке одной
                       программы получить доступ к другой через
                       Clipboard или непосредственно (например,
                       WM_DRAWCLIPBOARD и WM_SIZECLIPBOARD).

     DDE               Сообщения при динамическом обмене данными.
                       Генерируются при  контакте   между   двумя
                       прикладными программами (например,
                       WM_DDE_INITIATE и WM_DDE_ACK).

     Non-client        Сообщения, генерируемые Windows для
                       обработки служебных зон прикладных программ
                       пользователя (например, WM_NCHITTEST и
                       WM_NCCREATE).

     Other             Все остальные сообщения, которые начинаются
                       с "WM_" и не относятся  к  указанным  выше
                       типам, например  сообщения интерфейса мно-
                       жественных документов  и  пользовательские
                       сообщения.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Таблица D.2 Типы сообщений Windows

Примечание: После отбора требуемых сообщений,  программу  следует
            профилировать в  обычном порядке.  Для просмотра ста-
            тистики сообщений  Windows  следует  выбрать  команду
            "Window Procedure"  ("Процедура  системы Windows") из
            блока диалога "Display Options" (Параметры  отображе-
            ния") с  помощью  локального  меню  Execution Profile
            (Профилирование).

         Профилирование библиотек динамической связи
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     DLL (библиотека  динамических  связей)  является библиотекой
подпрограмм и ресурсов системы Windows,  которая  подключается  к
прикладной программе при ее выполнении вместо той,  которая подк-
лючалась при компиляции. Это дает возможность нескольким приклад-
ным программам  совместно использовать одни и те же подпрограммы,
данные или драйверы устройств, таким образом экономя потребляемую
память. При запуске программы,  использующей DLL, она загружается
таким образом,  что получает доступ к DLL (если DLL уже не загру-
жена в память).

     При запуске  программы,  связанной с DLL,  TPROFW определяет
какая из библиотек содержит таблицы имен (когда они  откомпилиро-
ваны с возможностью последующей отладки) и отслеживает их.
     TPROFW может загрузить библиотеки DLL,  которые не  содержат
таблицы имен, но только в окно CPU.

     TPROFW автоматически загружает таблицу имен и исходный текст
каждой из библиотек, которые связаны с прикладной программой, од-
нако  только в том случае,  если в библиотеке DLL содержится сов-
местимая таблица имен.  Таблица имен библиотеки DLL является сов-
местимой  с TPROFW,  если она откомпилирована с разрешением сбора
информации профилирования с помощью компиляторов Borland C++  или
Turbo Pascal для Windows.

Примечание: Библиотеки  DLL,  загружающиеся  посредством  запроса
LoadLibrary (Загрузить библиотеку) не могут автоматически  отсле-
живаться системой Turbo Profiler.  Для того, чтобы эти библиотеки
отслеживались, следует поместить маркер фрагмента Stop после зап-
роса LoadLibrary.  При  обнаружении профилировщиком этого маркера
фрагмента предоставляется возможность доступа  к  библиотеке  DLL
посредством команды  Module  (Модуль) локального меню окна Module
(Модуль) или же посредством View|Module (Просмотреть|Модуль).

     Поскольку таблица имен для библиотек DLL не связана с табли-
цей имен  для  выполняемой программы,  Turbo Profiler создает от-
дельный файл статистики (.TFS) и отдельный файл описания фрагмен-
тов (.TFA)  для каждой профилируемой библиотеки DLL.

           СООБЩЕНИЯ ОБ ОШИБКАХ  ПРОГРАММЫ TPROFW
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Программой TPROFW выдается только одно сообщение об ошибках.
Помимо этого   сообщения,   выдаваться  сообщения  системы  Turbo
Profiler.

Ctrl-Alt-SysRq interrupt. System crash possible. Continue?
     (Прерывание при  нажатии  {Ctrl}{Alt}{SysRq}.  Возможен сбой
      системы. Продолжить?)

     Была попытка выйти из TPROFW  или  перезагрузить  прикладную
     программу  после  останова программы при нажатии {Ctrl}{Alt}
     {SysRq}.  Поскольку ядро системы Windows функционирует после
     останова  программы,  выход из TPROFW или перезагрузка прик-
     ладной программы может привести к непредсказуемым  результа-
     там (наиболее вероятным следствием является зависание систе-
     мы или перезагрузка).

          ПРИЛОЖЕНИЕ E. ВИРТУАЛЬНОЕ ПРОФИЛИРОВАНИЕ
                С ИСПОЛЬЗОВАНИЕМ ПРОЦЕССОРА 80386
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система Turbo Profiler позволяет полностью использовать воз-
можности систем,  которые оснащены процессором 80386. Виртуальное
профилирование позволяет    профилируемой   программе   полностью
использовать адресное пространство,  расположенное ниже 640 Кбайт
точно так же, как если бы профилировщик не был загружен. (Система
Turbo Profiler загружается в расширенную (extended) память, в ад-
реса свыше 1 Мбайта).

     Профилирование осуществляется точно так же,  как и при обыч-
ном использовании системы Turbo Profiler с тем  исключением,  что
прикладная программа  загружается  и  выполняется на точно тех же
адресах,  на которых она выполнялась бы вне процесса профилирова-
ния.  Это  чрезвычайно  полезно как для профилирования больших по
объему программ, так и для обнаружения логических ошибок, которые
пропадают, если программа загружается в более высокую область па-
мяти, как это происходит при обычном профилировании.

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

  ОБОРУДОВАНИЕ, НЕОБХОДИМОЕ ДЛЯ ВИРТУАЛЬНОГО ПРОФИЛИРОВАНИЯ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для того,  чтобы использовать виртуальный профилировщик, не-
обходимо иметь компьютер, оснащенный процессором 80386 или 80486.
Кроме того,  он должен иметь по меньшей мере 700 Кбайт  доступной
расширенной (extended) памяти.  Если расширенная память использо-
валась для псевдодисков,  кэш-буферов и т.п., то, возможно, пона-
добится  создать  специальный  файл  CONFIG.SYS или AUTOEXEC.BAT,
который удаляет некоторые из этих программ во время использования
виртуального профилировщика.

НСТАЛЛЯЦИЯ ДРАЙВЕРА УСТРОЙСТВА ДЛЯ ВИРТУАЛЬНОГО ПРОФИЛИРОВЩИКА
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Перед запуском виртуального профилировщика следует убедиться
в том,  что в своем файле конфигурации CONFIG.SYS указан  драйвер
TDH386. (Файл  TDH386  включен в пакет Turbo Debugger.) Это можно
осуществить путем включения в файл  CONFIG.SYS  строки,  подобной
следующей:

     DEVICE = TDH386.SYS

     Если драйвер  устройства TDH386.SYS помещен в какой-либо ка-
талог,  отличный от корневого,  то  проверьте,  включен  ли  путь
доступа  к  этому каталогу в качестве составной части имени файла
драйвера устройства.

     Обычно виртуальный профилировщик позволяет отводить  до  256
байт  для  командных строк среды DOS.  Если этого объема окажется
недостаточно или если это количество представляется  излишним,  и
желательно сберечь максимально возможный объем памяти, то в файле
CONFIG.SYS следует воспользоваться параметром "-e", который зада-
ет число байтов среды. Например, с помощью строки

     DEVICE = TDH386.SYS -e2000

можно зарезервировать под переменные среды DOS 2000 байтов.

             ЗАПУСК ВИРТУАЛЬНОГО ПРОФИЛИРОВЩИКА
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Запуск виртуального  профилировщика практически ничем не от-
личается от обычного запуска системы Turbo Profiler,  и  он  осу-
ществляется с помощью командной строки следующего вида:

     TF386 [параметры] программа [параметры_программы]

     Другими словами,  вместо "TPROF" следует ввести "TF386". За-
тем система TF386 осуществляет поиск  выполняемой  программы  для
Turbo Profiler и загрузку ее в расширенную (extended) память.

     Если имеются другие программы или драйверы устройств,  кото-
рые используют расширенную память, например, псевдодиски, кэш-бу-
феры  и т.п.,  то  программе TF386 следует указать,  какой объем
расширенной памяти должен быть  зарезервирован  для  этих  других
программ.  Это можно осуществить с помощью параметра "-e" команд-
ной строки. После параметра "-e" должно располагаться число кило-
байт  (К) расширенной памяти,  которая используется другими прог-
раммами. Например,

     TF386 -e512 myprog

     Данная командная строка указывает программе TF386, что необ-
ходимо  зарезервировать  первые  512 Кбайт расширенной памяти для
использования другими  программами.  (Если  машина   поддерживает
стандарт XMS,  то надобность в этом отпадает; программа TF386 вы-
деляет память от драйвера устройства  XMS,  если  последний  име-
ется.)

     Поскольку, вероятно, всегда резервируется один и тот же объ-
ем расширенной памяти для других  программ,  TF386  предоставляет
возможность задать  численное значение объема расширенной памяти,
который должен быть зарезервирован, только один раз на все после-v
дующее время работы.  Чтобы указать,  что значение,  задаваемое в
параметре "-e", должно быть занесено в файл выполняемой программы
TF386, вместе с параметром "-e" необходимо задать параметр "-w".

     При указании данного параметра будет запрошено имя выполняе-
мой программы.  Если работа ведется под  управлением  DOS  версии
3.0 или более поздней,  в данном запросе будет указано полное имя
каталога и имя того файла,  из которого была  запущена  программа
TF386. Можно принять предложенное по умолчанию имя, нажав клавишу
{Enter},  а также можете ввести новое имя выполняемого файла. Это
новое имя должно представлять файл,  который уже существует и яв-
ляется  копией программы TF386.

     Если работа ведется под управлением DOS версии 2.х,  то тре-
буется задать  полное  имя каталога и имя файла выполняемой прог-
раммы TF386.

     Ниже приводится полный перечень параметров командной  строки
для файла TF386.EXE:

-?       Получение  подсказки  по использованию программы TF386.

-e<####> Задает  число килобайт расширенной (extended) памяти,
         которое используется другими программами или  профили-
         руемой программой. (Если система поддерживает стандарт
         XMS, то задавать этот параметр не нужно.)

-f<####> Делает возможной  эмуляцию EMS посредством разбиения на
         страницы (в   расширенной    (extended)    памяти)    и
         устанавливает  сегмент  страничного кадра равным <####>
         (в  шестнадцатиричном  формате).  Последние  три  цифры
         должны быть нулями (например, C000 или E000).  Отметим,
         что  данный  параметр  относится только к вызовам EMS в
         Turbo Profiler. Если при загрузке программы TF386 Вы не
         используете  этот  параметр,   то   TF386   не   сможет
         воспользоваться EMS.

-f-      Запрещает  эмуляцию  EMS (в основном, для переопределения
         заданного ранее параметра командной строки).

-w       Модифицирует  файл  TF386.EXE,  занося  в  него   новые
         используемые по  умолчанию значения параметров "-e" или
         "-f". Вы можете ввести имя нового  выполняемого  файла,
         который  еще  не  существует,  и  TF386  создаст  новый
         выполняемый  файл.

     Заметьте, что  параметры файла TF386.EXE должны стоять в ко-
мандной строке первыми; они должны располагаться перед любыми па-
раметрами  системы  Turbo Profiler или перед именем профилируемой
программы. Например, строка

     TF386 -e1024 -fD000 -w

резервирует 1024 Кбайт расширенной (extended) памяти, делает воз-
можной эмуляцию EMS с кадром страницы, равным D000, и модифициру-
ет файл TF386.EXE, записывая в него эти новые значения.

     Для того,  чтобы отобразить на экране весь перечень парамет-
ров  командной  строки,  которые  могут  задаваться для программы
TF386.EXE,  достаточно ввести строку "TF386 -?" или "TF386 -h"  и
нажать клавишу {Enter}.

     Примечание: Если  имеется  машина на базе процессора 80386 и
                 следует прочесть параметры командной строки  для
                 файла TF386.EXE,  необходимо, чтобы был загружен
                 драйвер TDН386.SYS.

    РАЗЛИЧИЯ МЕЖДУ ОБЫЧНЫМ И ВИРТУАЛЬНЫМ ПРОФИЛИРОВАНИЕМ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Большинство операций  выполняется  абсолютно одинаково неза-
висимо от вида проводимого профилирования: обычного или виртуаль-
ного  на процессоре 80386.  Можно отметить только следующие отли-
чия, которые присущи виртуальному профилированию:

* При  использовании  команды  "File|DOS  Shell"  ("Файл|Оболочка
  DOS") для выполнения команды DOS профилируемая программа никог-
  да не откачивается на диск.  Это означает, что не всегда памяти
  хватит  для  того,  чтобы запустить другие программы по запросу
  DOS.

* Прикладная программа может использовать почти все команды  про-
  цессора  80386 за исключением привилегированных команд защищен-
  ного режима адресации: "CLTS" (стирание флага переключенной за-
  дачи), "LMSW" (загрузка слова состояния машины), "LTR" (загруз-
  ка регистра задачи),  "LGDT" (загрузка регистра глобальной таб-
  лицы регистров), "LIDT" (загрузка регистра таблицы дескрипторов
  прерываний),  "LLDT" (загрузка регистра локальной таблицы деск-
  рипторов).

* Несмотря на то,  что во время виртуального профилирования можно
  использовать все расширенные режимы адресации процессора  80386
  и 32-битовые регистры, нельзя обращаться к адресам памяти свыше
  1 Мбайта.  При попытке такой  адресации,  будет  генерироваться
  прерывание  по исключительной ситуации,  и Turbo Profiler вновь
  вернет себе управление.

* Виртуальное профилирование нельзя осуществлять,  если уже рабо-
  тает программа или драйвер устройства,  который использует вир-
  туальный и защищенный  режимы  адресации  процессора  80386.  К
  числу таких программ относятся следующие:

     *    операционная оболочка DesqView

     *    операционная оболочка Microsoft Windows-386

     *    драйвер QEMM.SYS, эмулятор памяти EMS фирмы QuarterDeck

     *    драйвер CEMM.SYS, эмулятор памяти EMS фирмы Compaq

     *    386^MAX

* Если обычно используется одна из этих программ или подобная ей,
  то необходимо прервать их работу или выгрузить их из памяти пе-
  ред тем, как использовать программу TF386.

            СООБЩЕНИЯ ОБ ОШИБКАХ ПРОГРАММЫ TF386
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Программа TF386 генерирует одно из представленных ниже сооб-
щений об  ошибках,  когда  она  не может загрузиться и управление
возвращается среде DOS.  Для успешного  запуска  программы  TF386
следует исправить указанные ошибки.

TF386 error: 80386 device driver missing or wrong version
     (Ошибка программы TF386: драйвер устройства процессора 80386
     не установлен или установлена неверная версия)
          Перед тем, как вызвать в командной строке DOS программу
          TF386,  в  файле  CONFIG.SYS  необходимо задать драйвер
          устройства TFH386.SYS.

TF386 error: Can't enable the A20 address line
     (Ошибка программы TF386: Невозможна активизация адресной ши-
     ны A20)
          Программа TF386 не может реализовать обращение к памяти
          свыше 1 Мбайта. Это сообщение может возникать в случае,
          если работа  ведется  на  системе,  которая не является
          полностью IBM-совместимой.

TF386 error: Can't find TPROF.EXE
     (Ошибка программы TF386:  Не обнаружен файл TPROF.EXE) Прог-
          рамма TF386 не смогла обнаружить файл TPROF.EXE.

TF386 error: Couldn't execute TPROF.EXE
     (Ошибка программы TF386: Невозможен запуск файла TPROF.EXE)
          Программа TF386 не смогла запустить файл TPROF.EXE.

TF386 error: Environment too long; use -e<####> switch with
TFH386.SYS
     (Ошибка программы TF386: Слишком велик объем среды; восполь-
     зуйтесь   параметром  -e<####>,  который  задается  драйверу
     TFH386.SYS)
          Необходимо изменить  значение  параметра "-e" так,  как
          описано выше в разделе "Запуск виртуального профилиров-
          щика".

TF386 error: Not enough Extended Memory available
     (Ошибка программы TF386:  Не хватает  доступной  расширенной
      памяти)
          Программе TF386 не хватает памяти для работы. Необходи-
          мо установить на машину дополнительную память или осво-
          бодить некоторую часть памяти (например, путем уменьше-
          ния размера псевдодиска).

TF386 error: Wrong CPU type (not an 80386)
     (Ошибка программы TF386:  Не соответствует тип  центрального
     процессора (он не является процессором 80386))
          Работа ведется на машине,  не имеющей процессора  80386
          или 80486.

     При попытках  модифицировать программу TF386 с помощью пара-
метра "-w", возможно появление следующих сообщений об ошибках:

TF386 error: Cannot open program file
     (Ошибка программы TF386:  Открытие программного файла невоз-
      можно)

TF386 error: Cannot read program file
     (Ошибка программы TF386: Чтение программного файла невозмож-
      но)

TF386 error: Cannot write program file
     (Ошибка программы TF386: Запись в программный файл невозмож-
      на)

TF386 error: Program file corrupted or wrong version
     (Ошибка программы  TF386:  Программный  файл  поврежден  или
     используется неверная версия)

          СООБЩЕНИЯ ОБ ОШИБКАХ ДРАЙВЕРА TDH386.SYS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Существует только два возможных сообщения об ошибках,  кото-
рые связаны с драйвером TDH386.SYS:

Wrong CPU type: TDH386 driver not installed
     (Не соответствует   тип   центрального  процессора:  драйвер
     TDH386 не установлен)

Invalid command line: TDH386 driver not installed
     (Неверная командная строка: драйвер TDH386 не установлен)

            ПРИЛОЖЕНИЕ F. ЗАПРОСЫ И СООБЩЕНИЯ ОБ ОШИБКАХ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

               ЗАПРОСЫ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Ответ на запрос может осуществляться одним из двух способов:

* Введите ответ и завершите его ввод нажатием клавиши {Enter}

* Нажмите  клавишу  {Esc,  чтобы удалить с экрана блок диалога и
  возвратиться к той команде меню,  выполнение которой привело  к
  открытию этого блока диалога.

     В некоторых запросах предоставляется лишь возможность выбора
между двумя элементами (например, "Yes/No" ("Да/Нет")). Для того,
чтобы  выбрать  необходимый  вариант ответа можно воспользоваться
клавишей {Tab} ("Табуляция"), а затем нажать клавишу {Enter}, ли-
бо нажать непосредственно клавишу {Y} ("Да") или {N} ("Нет"). От-
мена команды производится нажатием клавиши {Esc}.

     Чтобы получить более подробную информацию о командах клавиа-
туры, которые  могут  использоваться во время активного состояния
блока диалога, следует обратиться к Главе 2.

     Ниже приводится упорядоченный по алфавиту список  всех  зап-
росов и сообщений, которые генерируются блоками диалога:

Enter code label to position to
     (Введите метку кода,  к которой необходимо осуществить пере-
     ход)
          Введите в панель "Code" ("Код программы") адрес, по ко-
          торому  необходимо проанализировать машинную программу.
          Панель   "Code"   ("Машинная   программа")   отображает
          дисассемблированные команды по заданному адресу.

Enter command line arguments
     (Введите аргументы командной строки)
          Введите аргументы  командной  строки  для профилируемой
          программы. Можно модифицировать используемый в  настоя-
          щий момент набор аргументов командной строки или ввести
          новый набор.

          Затем будет выдан запрос,  следует ли осуществить пере-
          загрузку прикладной программы с диска.  Некоторые языки
          или программы,  например,  программы,  написанные на C,
          требуют,  чтобы  перезагрузка программы осуществлялась
          для того, чтобы заданные аргументы начали действовать.

Enter file name to restore areas from
     (Введите имя файла, из которого необходимо восстановить
     фрагменты (профилирования))
          Введите имя файла,  из которого необходимо восстановить
          фрагменты (профилирования). Если в имени файла задается
          расширение,  то будет использоваться это расширение.  В
          противном случае будет  использовано  расширение  имени
          .TFA.

Enter file name to restore from
     (Введите имя файла, из которого необходимо восстановить)
          Введите имя файла,  из которого необходимо восстановить
          статистические данные.  Если  в  имени  файла  задается
          расширение,  то будет использоваться это расширение.  В
          противном случае будет использовано расширение имени
          .TFS.

Enter file name to save areas to
     (Введите имя файла, в котором необходимо сохранить фрагменты
     (профилирования))
          Введите имя файла, в котором необходимо сохранить уста-
          новленные  в  настоящий  момент фрагменты (профилирова-
          ния). Если в имени файла задается расширение,  то будет
          использоваться это расширение. В противном случае будет
          использовано расширение .TFA.

Enter file name to save to
     (Введите имя файла, в котором необходимо сохранить)
          Введите имя файла, в котором необходимо сохранить теку-
          щие статистические данные.  Если в имени файла задается
          расширение,  то будет использоваться это расширение.  В
          противном случае будет использовано расширение .TFS.

Enter file name to write to
     (Введите имя файла, в который необходимо осуществить запись)
          Введите имя файла,  в который необходимо послать отчет.
          Если файл с таким именем уже существует, то его прежнее
          содержимое будет уничтожено.

Enter name of configuration file
     (Введите имя конфигурационного файла)
          Введите имя  файла  конфигурации,  который  должен быть
          считан или в который должна быть записана текущая  кон-
          фигурация. Если считывание осуществляется из файла кон-
          фигурации, то  можно  ввести  маску  файла,  в  которой
          используются метасимволы;  в результате появится список
          соответствующих заданной маске файлов.

Enter maximum number of areas
     (Введите максимальное число фрагментов профилирования)
          Введите максимальное число фрагментов,  на которое тре-
          буется поделить программу. Поскольку определение каждо-
          го фрагмента требует некоторых затрат памяти, постарай-
          тесь  в  качестве максимального числа задать минимально
          необходимое значение.

Enter maximum symbol width to display
     (Введите максимальную  отображаемую длину (в литерах) симво-
     лического имени (идентификатора))
          Введите значение  длины  (в  литерах) для символических
          имен (идентификаторов) в отчетах,  а также для символи-
          ческих имен, отображаемых в окнах.

Enter new directory
     (Установите новый каталог)
          Введите имя  нового  дисковода и/или каталога,  которые
          теперь должны стать текущим дисководом и текущим  ката-
          логом.

Enter new line number
     (Введите новый номер строки)
          Введите новый  номер  строки,  к  которой  должен пере-
          меститься курсор в текстовом  файле.  Первая  строка  в
          файле имеет  номер  1.  Если заданный номер строки ока-
          жется больше номера последней строки в файле, то курсор
          переместится к последней строке файла.

Enter new page height
     (Введите новую высоту страницы)
          Введите число,  показывающее, сколько строк должно быть
          в странице, которая будет пересылаться на принтер или в
          дисковый  файл.  Обычный 11-ти дюймовый лист бумаги со-
          держит 66 строк.

Enter new page width
     (Введите новую ширину страницы)
          Введите ширину страницы для отчетов,  которые будут пе-
          ресылаться на принтер или в дисковый файл. Обычный лист
          бумаги содержит 80 столбцов.

Enter program name to load
     (Введите имя программы, которая должна быть загружена)
          Введите имя программы,  которая должна быть  загружена.
          Если программа имеет расширение имени .EXE, то задавать
          его не обязательно;  если программа имеет любое  другое
          расширение, его необходимо задать.

          Если указывается  спецификация  имени файла,  в которой
          используются метасимволы, или подтверждается специфика-
          цию *.EXE,  используемая по умолчанию,  то отображается
          перечень соответствующих этой маске файлов,  из которых
          можно осуществить выбор.

Enter program run count
     (Введите число прогонов программы)
          Введите число,  показывающее, сколько раз должен выпол-
          няться прогон программы в  целях  накопления  статисти-
          ческих  данных  по  производительности  программы.  Чем
          большее число раз будет осуществлен  прогон  программы,
          тем более точными будут временные показатели ее работы.

Enter routine name to add
     (Введите имя добавляемой подпрограммы)
          Введите имя функции, которую требуется включить, исклю-
          чить или задать.

Enter search string
     (Введите искомую строку)
          Введите символьную строку,  которая должна являться об-
          разцом для  поиска.  Можно  воспользоваться  несложными
          средствами поиска по метасимволам,  чтобы задать неточ-
          ную  искомую  строку;  например,  можно воспользоваться
          символом "*",  который соответствует нулевой строке или
          произвольному  числу  любых символов,  а также символом
          "?", который соответствует любому единичному символу.

Enter source directory list
     (Введите список каталогов исходных файлов)
          Введите имя каталога или  имена  каталогов,  в  которых
          должен осуществляться поиск исходных файлов.

          Если требуется ввести несколько имен каталогов,  то не-
          обходимо разделить имена доступа разных каталогов с по-
          мощью пробела или символа точки с запятой (";").  Поиск
          исходных файлов будет осуществляться в этих каталогах в
          той  последовательности,  в которой они указаны во вве-
          денном списке.

Pick a caller
     (Выберите вызывающую подпрограмму)
          Выберите какую-либо подпрограмму из  списка  вызывающих
          подпрограмм. После этой операции маркер будет перемещен
          к этой подпрограмме в том окне, которое было выбрано из
          предыдущего меню.

Pick a method name
     (Выберите имя метода)
          Было задано имя подпрограммы,  которая может относиться
          к нескольким методам в одном объекте.  Выберите необхо-
          димое  имя из представленного списка с нужными аргумен-
          тами.

Pick a module
     (Выберите модуль)
          Выберите имя модуля для просмотра в окне "Module" ("Мо-
          дуль"). Предлагается  список  всех модулей в прикладной
          программе. Нужно либо воспользоваться клавишами переме-
          щения курсора для перемещения к требуемому модулю, либо
          начать вводить имя этого модуля.  По мере  ввода  имени
          этого модуля, световой маркер будет перемещаться к пер-
          вому модулю,  который соответствует  введенным  буквам.
          Когда  световой маркер установится на требуемом модуле,
          нажмите клавишу {Enter}.

Pick a source file
     (Выберите исходный файл)
          Выберите новый исходный файл, который должен быть отоб-
          ражен в окне "Module" ("Модуль"). В предлагаемом списке
          будут  отображаться  все  исходные  файлы,  из  которых
          состоит данный модуль.

Pick a symbol name
     (Выберите символическое имя идентификатора)
          Выберите имя   идентификатора  (символическое  имя)  из
          списка отображенных символических имен.  По мере  ввода
          имени световой маркер установится на первом идентифика-
          торе, который начинается с введенных букв.

Pick a window
     (Выберите окно)
          Выберите окно,  которое требуется активизировать, пере-
          мещая  к  нему  световой  маркер с последующим нажатием
          клавиши {Enter} или выбрав кнопку "OK" ("Выполнить").

          Окно можно закрыть,  переместив световой маркер к имени
          этого окна и нажав клавишу {Del} или {Ctrl}{Y}.

Pick interrupt
     (Выберите прерывание)
          Выберите прерывание из списка прерываний, встроенного в
          систему Turbo Profiler.

Pick a macro to delete
     (Выберите удаляемое макроопределение)
          Выберите макроопределение, удаляемое из списка макрооп-
          ределений.

Reload program and change profiling mode?
     (Перезагрузить программу, изменить режим профилирования?)
          При смене режима профилирования с активного на  пассив-
          ный или на зонный или же с зонного на активный, либо на
          пассивный,  вся собранная статистика будет  уничтожена.
          Если  требуется  сохранить статистику до ее уничтожения
          на данный запрос ответьте "NO"  ("Нет"),  и  статистика
          сохранится в файле с расширением .TFS. В противном слу-
          чае ответьте "YES" ("Да").

         СООБЩЕНИЯ ОБ ОШИБКАХ СИСТЕМЫ TURBO PROFILER
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Cистема Turbo Profiler использует сообщения об  ошибках  для
того, чтобы указать на какие-либо неожиданные события. Иногда об-
работка заданной команды оказывается невозможной.  Иной раз сооб-
щение предостерегает  о том,  что события развиваются неожиданным
образом.

     Обычно появление сообщения об ошибке сопровождается  выдачей
звукового сигнала.  Выдачу звукового сигнала можно отменить с по-
мощью программы настройки TFINST.

Already recording, do you want to abort?
     (Уже идет запись, хотите преждевременно прекратить?)
          Макрос уже записывается.  Начать запись другого макроса
          нельзя до тех пор, пока не будет завершена запись теку-
          щего. Нажмите клавишу {Y} ("Да"), чтобы прервать запись
          макроса, {N} ("Нет"), чтобы продолжить запись макроса.

Ambiguous symbol <символическое_имя>
     ("Многозначный" идентификатор <символическое_имя>)
          Введено имя  функции-компонента или имя составного эле-
          мента данных, и система Turbo Profiler не может опреде-
          лить,  какой из многочисленных экземпляров данного ком-
          понента интересует.

          Подобная ситуация может возникать,  если имя компонента
          дублируется в двух классах с множественным наследовани-
          ем.  Используйте для явного задания имени  необходимого
          компонента символ переопределения "имя_класса::".

Bad or missing configuration file name
     (Неверное или отсутствующее имя файла конфигурации)
          При запуске  системы  Turbo  Profiler было задано с по-
          мощью параметра командной строки "-c" имя  несуществую-
          щего файла.  Вместо значений, которые содержатся в ука-
          занном файле,  используются встроенные используемые  по
          умолчанию значения конфигурационных параметров.

Bad interrupt number entered
     (Введен неверный номер прерывания)
          Введен неверный номер прерывания.  Допустимыми являются
          номера прерываний от 9 до FF.

Bad line number <номер_строки>
     (Неверный номер строки <номер_строки>)
          Строка с указанным номером либо не существует,  либо не
          соответствует строке исходного кода.

          Можно задавать только номера тех исходных строк,  кото-
          рые находятся в функциях,  но нельзя  задавать  строки,
          лежащие вне функций.

Bad module name <имя_модуля>
     (Неверное имя модуля <имя_модуля>)
          Введенное имя модуля не существует.

Can't execute DOS command processor
     (Выполнение командного процессора DOS невозможно)
          Либо для  запуска  командного процессора DOS не хватает
          памяти,  либо обнаружить командный процессор не удается
          (это может иметь место вследствие того,  что переменная
          среды COMSPEC либо отсутствует,  либо неверно  задана).
          Убедитесь в том, что переменная среды COMSPEC корректно
          задает маршрутное имя командного процессора DOS.

Can't open <имя_файла>
     (Доступ к файлу <имя_файла> невозможен)
          Данное сообщение появляется при наличии проблем с  чте-
          нием  или записью в файл.  Например,  на диске может не
          остаться места для записи нового файла статистики.

Can't open printer
     (Доступ к принтеру невозможен)
          При передаче данных на принтер  возникла  ошибка.  Про-
          верьте, находится ли принтер в оперативном (online) ре-
          жиме и есть ли в нем бумага.

Can't swap user program to disk
     (Невозможна откачка программы пользователя на диск)
          Профилируемая программа не может быть откачана на диск.
          Существует вероятность того,  что для откачки программы
          на диске не  хватает  места.  Редактировать  какие-либо
          файлы или  выполнять  команды  DOS  будет нельзя до тех
          пор, пока не будет освобождено некоторое пространство.

Clear all existing statistics
     (Удалите все существующие статистические данные)
          Когда изменяется  тактовая  частота,  все  существующие
          статистические  данные  становятся  лишенными  смысла и
          должны быть уничтожены.  Если  удаление  статистических
          данных не подтверждается,  то тактовая частота меняться
          не будет.

Edit program not specified



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