Опубликован: 06.12.2004 | Уровень: специалист | Доступ: платный
Лекция 10:

Заключение

Трассировка

С логической точки зрения в трассировке участвуют три процесса:

  • трассируемый (целевой);
  • трассирующий (управляющий трассировкой);
  • анализирующий данные трассировки.

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

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

События трассировки подразделяются на две категории:

  • пользовательские;
  • системные.

Пользовательские события генерируются при вызове функции posix_trace_event().

Системные события генерируются реализацией в ответ на действия ОС или приложения.

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

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

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

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

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

Для создания и уничтожения атрибутных объектов потоков трассировки применяются функции posix_trace_attr_init() и posix_trace_attr_destroy().

Для манипулирования атрибутами, идентифицирующими поток трассировки, служат функции posix_trace_attr_getgenversion(), posix_trace_attr_getname(), posix_trace_attr_setname(), posix_trace_attr_getcreatetime().

Функция posix_trace_attr_getclockres() позволяет опросить разрешающую способность часов, с помощью которых проставляются временные штампы.

Поведенческие атрибуты потоков и журналов обслуживаются функциями posix_trace_attr_getinherited(), posix_trace_attr_setinherited(), posix_trace_attr_getstreamfullpolicy(), posix_trace_attr_setstreamfullpolicy(), posix_trace_attr_getlogfullpolicy(), posix_trace_attr_setlogfullpolicy().

Опросить и установить хранящиеся в атрибутном объекте размеры событий, потоков и журналов можно с помощью функций posix_trace_attr_getmaxdatasize(), posix_trace_attr_setmaxdatasize(), posix_trace_attr_getmaxsystemeventsize(), posix_trace_attr_getmaxusereventsize(), posix_trace_attr_getstreamsize(), posix_trace_attr_setstreamsize(), posix_trace_attr_getlogsize(), posix_trace_attr_setlogsize().

Создание потока трассировки осуществляется функциями posix_trace_create() или posix_trace_create_withlog().

Чтобы активизировать трассировку, следует воспользоваться функцией posix_trace_start() ; для последующей приостановки нужно вызвать функцию posix_trace_stop().

Функция posix_trace_shutdown() завершает трассировку и освобождает ресурсы, ассоциированные с потоком.

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

Опрос статуса потока трассировки осуществляется с помощью функции posix_trace_get_status().

Стандартом POSIX-2001 предусмотрен опрос атрибутов потока трассировки. Для этого служит функция posix_trace_get_attr().

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

При опросе и установке фильтров событий трассировки (функции posix_trace_get_filter() и posix_trace_set_filter() ) применяется апробированная схема работы с множествами, основанная на функциях posix_trace_eventset_empty(), posix_trace_eventset_fill(), posix_trace_eventset_add(), posix_trace_eventset_del(), posix_trace_eventset_ismember().

Играющие техническую роль функции posix_trace_trid_eventid_open(), posix_trace_eventid_get_name() и posix_trace_eventid_equal() обслуживают идентификаторы типов событий, рассматриваемые как абстрактные объекты.

Функции posix_trace_eventtypelist_getnext_id() и posix_trace_eventtypelist_rewind() позволяют обрабатывать совокупность идентификаторов типов событий, присутствующих в заданном потоке трассировки.

Функция posix_trace_eventid_open() ассоциирует имя события с идентификатором типа.

Анализирующий процесс обычно открывает журнал трассировки, обращаясь к функции posix_trace_open(), а обработав, закрывает его с помощью функции posix_trace_close(), быть может, в промежутке позиционируясь на начало журнала посредством функции posix_trace_rewind(). Для чтения событий служат функции posix_trace_getnext_event(), posix_trace_timedgetnext_event() и posix_trace_trygetnext_event().

Максим Соколов
Максим Соколов
Россия, г. Москва
фыв ыва
фыв ыва
Афганистан