MONITOR(3C)
НАЗВАНИЕ
monitor - подготовка временного профиля программы
СИНТАКСИС
#include <mon.h>
void monitor (lowpc, highpc, buffer, bufsize, nfunc)
int (*lowpc)( ), (*highpc)( );
WORD *buffer;
int bufsize, nfunc;
ОПИСАНИЕ
В выполняемую программу, полученную с помощью команды
cc -p, автоматически вставляются вызовы функции monitor
с подразумеваемыми значениями аргументов; явно эту
функцию следует вызывать только тогда, когда нужно
иметь возможность тонкого управления профилированием.
Функция monitor представляет собой интерфейс к системному вызову profil(2). Аргументы lowpc и highpc являются адресами двух функций; buffer - это адрес (пользовательского) массива элементов типа WORD (тип определен
во включаемом файле <mon.h>), длина массива задается
аргументом bufsize. Функция monitor организует запись в
массив buffer гистограммы значений периодически опрашиваемого счетчика команд, а также счетчиков числа вызовов некоторых функций. Диапазон фиксируемых значений
счетчика команд простирается от lowpc (нижний предел)
до highpc (диапазон кончается перед этим адресом). Нижний предел lowpc должен быть отличен от нуля. Храниться
может не более nfunc счетчиков вызовов; фиксируются вызовы только тех функций, которые были откомпилированы с
опцией профилирования -p команды cc(1).
Чтобы результаты измерений давали представление о реальной ситуации, особенно когда есть небольшие, но часто используемые функции, надо, чтобы размер массива
buffer был сравнимым с отслеживаемым диапазоном адресов.
Для подготовки временного профиля всей программы достаточно следующей конструкции:
extern etext;
...
monitor ((int (*)()) 2, &etext, buf, bufsize, nfunc);
Объект etext лежит непосредственно за сегментом команд
[см. end(3C)].
Чтобы прекратить профилирование и записать результаты,
следует использовать обращение
monitor((int (*)()) 0, 0, 0, 0, 0);
Затем для просмотра результатов можно воспользоваться
командой prof(1).
С помощью переменной окружения PROFDIR можно управлять
именем выходного файла функции monitor. Если такой переменной нет, то в текущем каталоге создается файл
mon.out. Если переменная существует, но значения у нее
нет, то monitor не профилирует программу и не создает
выходной файл. В противном случае создается выходной
файл с именем $PROFDIR/идентификатор_процесса.mon.out.
При автоматическом вызове процедуры monitor после компиляции по команде cc -p выходной файл получает имя
$PROFDIR/идентификатор_процесса.имя_программы.
ФАЙЛЫ
mon.out
СМ. ТАКЖЕ
profil(2), end(3C).
cc(1), prof(1) в Справочнике пользователя.
СЮРПРИЗЫ
Форма
$PROFDIR/идентификатор_процесса.mon.out
не работает. Работает автоматическая форма
$PROFDIR/идентификатор_процесса.имя_программы