Функцию трассировки можно запустить из программы с помощью функции trcstart(), которая расположена в библиотеке librts.a. Ниже описан синтаксис функции trcstart():
int trcstart(char *args)
где args - это список параметров для команды trace. По умолчанию запускается трассировка системных событий (канал 0). Для запуска трассировки общего назначения укажите в строке параметров args опцию -g. После успешного завершения функция trcstart() возвратит ИД канала. Для трассировки общего назначения с помощью данного ИД канала можно записывать частный канал общего назначения.
При компиляции программы с помощью этой функции необходимо отдельно отправить запрос на ссылку на библиотекуlibrts.a (в качестве опции компиляции укажите -l rts).
Процедурой trace можно управлять с помощью вызова функций из библиотеки librts.a. При успешном завершении функции возвращают 0. Список функций:
При вызове каждой из перечисленных выше фунций управления трассировкой выполняются следующие действия:
Для более оптимального включения и выключения трассировки для отдельных разделов кода можно отправлять вызовы ioctl() непосредственно. Это позволит избежать многократных открытий и закрытий устройства управления трассировкой. Для применения интерфейса ioctl() в программе включите библиотеку sys/trcctl.h для того чтобы определить команды ioctl(). Ниже описан синтаксис функции ioctl():
ioctl (fd, CMD, канал)
где:
В приведенном ниже примере показано, как включить трассировку только для определенного участка кода:
#include <fcntl.h> #include <sys/trcctl.h> extern int trcstart(char *arg); char *ctl_dev ="/dev/systrctl"; int ctl_fd; main() { printf("настройка процедуры трассировки \n"); if (trcstart("-ad")){ perror("trcstart"); exit(1); } printf("открытие устройства трассировки \n"); if((ctl_fd =open (ctl_dev,O_RDWR))<0){ perror("open ctl_dev"); exit(1); } printf("включение трассировки \n"); if(ioctl(ctl_fd,TRCON,0)){ perror("TRCON"); exit(1); } /* *** эта строка будет трассироваться *** */ printf("Код, выводящий эту строку, будет трассироваться."); printf("выключение трассировки \n"); if (ioctl(ctl_fd,TRCOFF,0)){ perror("TRCOFF"); exit(1); } printf("останов системы трассировки \n"); if (trcstop(0)){ perror("trcstop"); exit(1); } exit(0); }
Поскольку в качестве параметра функции trcstart() не был задан файл вывода, вывод трассировки помещается в файл /var/adm/ras/trcfile, который также является файлом ввода по умолчанию для команды trcrpt.