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

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

Функции для работы с атрибутными объектами потоков трассировки

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

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

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

Трассирующий процесс управляет ресурсами, ассоциированными с потоками трассировки, а именно:

  • атрибутными объектами потоков трассировки ;
  • собственно потоками трассировки ;
  • журналами трассировки ;
  • идентификаторами типов событий ;
  • фильтрами.

Трассируемый процесс имеет дело со следующими объектами:

  • события ;
  • идентификаторы типов событий ;
  • точки трассировки.

Анализирующий процесс читает:

  • потоки трассировки ;
  • журналы ;
  • события ;
  • идентификаторы типов событий.

Перейдем к детальному рассмотрению функций трассировки.

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

#include <trace.h>
int posix_trace_attr_init (
    trace_attr_t *attr);
int posix_trace_attr_destroy (
    trace_attr_t *attr);
Листинг 8.1. Описание функций создания и уничтожения атрибутных объектов потоков трассировки.

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

Нормальным является нулевой результат; при наличии ошибки возвращается ее номер.

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

#include <trace.h>
int posix_trace_attr_getgenversion (
    const trace_attr_t *attr, 
    char *genversion);
int posix_trace_attr_getname (
    const trace_attr_t *attr, 
    char *tracename);
int posix_trace_attr_setname (
    trace_attr_t *attr, const 
    char *tracename);
#include <time.h>
#include <trace.h>
int posix_trace_attr_getcreatetime (
    const trace_attr_t *attr, 
    struct timespec *createtime);
Листинг 8.2. Описание функций манипулирования атрибутами, идентифицирующими поток трассировки.

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

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

#include <time.h>
#include <trace.h>
int posix_trace_attr_getclockres (
    const trace_attr_t *attr, 
    struct timespec *resolution);
Листинг 8.3. Описание функции опроса разрешающей способности часов, с помощью которых проставляются временные штампы.
Максим Соколов
Максим Соколов
Россия, г. Москва
фыв ыва
фыв ыва
Афганистан