DTrace - впечатляющая, мощная система трассировки, изначально созданная в Solaris, но она портирована на FreeBSD и Mac OSX.
DTrace использует язык высокого уровня, называемый D, в отличие от AWK или C. Вот пример:
io:::start
/pid == $1/
{
printf("file %s offset %d size %d block %llu\n", args[2]->fi_pathname,
args[2]->fi_offset, args[0]->b_bcount, args[0]->b_blkno);
}
С помощью командной строки sudo dtrace -q -s <name>.d <pid>
все операции ввода-вывода, созданные в этом процессе, регистрируются.
Мой вопрос заключается в том, можно ли и как вызывать пользовательские функции C из сценария DTrace для выполнения расширенных операций с этими данными трассировки во время самой трассировки.