Опубликован: 06.12.2004 | Доступ: свободный | Студентов: 1180 / 143 | Оценка: 4.76 / 4.29 | Длительность: 20:58:00
ISBN: 978-5-9556-0021-5
Лекция 8:

Трассировка пользовательских приложений

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

Структура типа posix_trace_status_info содержит информацию о состоянии активного потока трассировки. Согласно стандарту POSIX-2001, она должна содержать по крайней мере следующие поля.

int posix_stream_status;     
    /* Состояние потока трассировки */ 
int posix_stream_full_status;     
    /* Признак заполненности потока    */
int posix_stream_overrun_status;    
    /* Признак потери информации    */
int posix_stream_flush_status;     
    /* Идет ли в данный момент сброс в журнал */
int posix_stream_flush_error;     
    /* Были ли ошибки при последнем сбросе     */
int posix_log_overrun_status;     
    /* Признак потери информации в журнале     */
int posix_log_full_status;     
    /* Признак заполненности журнала    */

Значение поля posix_stream_status отражает режим, в котором находится поток трассировки:

POSIX_TRACE_RUNNING

Трассировка выполняется, поток принимает события.

POSIX_TRACE_SUSPENDED

Трассировка приостановлена (или не начиналась), поток не принимает события.

Поле posix_stream_full_status отражает состояние заполненности потока. Оно может содержать следующие значения.

POSIX_TRACE_FULL

Пространство в потоке исчерпано.

POSIX_TRACE_NOT_FULL

В потоке есть свободное пространство для событий.

Отметим, что на практике возможны все четыре комбинации значений полей posix_stream_status и posix_stream_full_status. В частности, сочетание POSIX_TRACE_RUNNING и POSIX_TRACE_FULL свидетельствует о том, что трассировка идет, но с потерей информации (новые события записываются на место старых).

Поле posix_stream_overrun_status содержит признак потери информации. Возможные значения:

POSIX_TRACE_OVERRUN

По крайней мере одно событие было потеряно (и, следовательно, не содержится в потоке трассировки ).

POSIX_TRACE_NO_OVERRUN

Ни одно событие не потеряно.

События могут теряться, если они генерируются при заполненном потоке или во время сброса потока трассировки в журнал.

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

POSIX_TRACE_FLUSHING

В данный момент происходит сброс потока трассировки в журнал.

POSIX_TRACE_NOT_FLUSHING

В данный момент не происходит сброс потока трассировки в журнал.

В поле posix_stream_flush_error находится нуль, если последний сброс прошел нормально; в противном случае там хранится код первой случившейся при сбросе ошибки (информация о последующих ошибках теряется).

Поле posix_log_overrun_status содержит признак потери информации в журнале с двумя возможными значениями: POSIX_TRACE_OVERRUN и POSIX_TRACE_NO_OVERRUN.

Поле posix_log_full_status служит признаком заполненности журнала. Возможных значений, естественно, два: POSIX_TRACE_FULL и POSIX_TRACE_NOT_FULL.

При создании потока трассировки его атрибуты стандартным для POSIX-2001 образом извлекаются из атрибутного объекта. Стандартом предусмотрены следующие атрибуты:

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

И для потоков, и для журналов трассировки   правила обработки ситуации заполнения могут сводиться к записи новых событий поверх самых старых (политика POSIX_TRACE_LOOP ) или к приостановке трассировки ( POSIX_TRACE_UNTIL_FULL ). Кроме того, для потоков может быть предусмотрен сброс в журнал с последующей очисткой (политика POSIX_TRACE_FLUSH ), а для для журналов – потенциально неограниченное расширение ( POSIX_TRACE_APPEND ).

Трассировка с записью в создаваемый поток может как наследоваться, так и не наследоваться порожденными процессами. Соответствующие значения признака наследования именуются POSIX_TRACE_INHERITED и POSIX_TRACE_CLOSE_FOR_CHILD.

В заключение раздела еще раз подчеркнем важные достоинства, которыми обладает механизм трассировки.

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

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

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