Вопрос в значительной степени подводит итог его. "dtrace 'печатают ассоциативный массив'", имеет точно один хит Google, и подобные поиски одинаково бесполезны.
Править:
Если бы я должен был использовать агрегирование, я не знаю, что все еще смог бы удалить записи. Мое приложение требует, чтобы я смог сделать вещи как:
file_descriptors[0] = "stdin"
file_descriptors[3] = "service.log"
...
...
file_descriptors[3] = 0
...
...
print_array(file_descriptors) # should print only those entries that have not been cleared.
Я знаю, что можно очистить все агрегирование, но что относительно однократного въезда?
ОБНОВЛЕНИЕ:
Так как я делаю это в OS X, и мое приложение должно отследить все дескрипторы файлов, которые были открыты конкретным процессом, я смог иметь массив 256 путей, таким образом:
syscall::open*:entry
/execname == $1/
{
self->path = copyinstr(arg0);
}
syscall::open*:return
/execname == $1/
{
opened[arg0] = self->path;
}
syscall::close*:entry
/execname == $1/
{
opened[arg0] = 0;
}
tick-10sec
{
printf(" 0: %s\n", opened[0]);
}
The above probe repeated 255 more times...
Это сосет. Я действительно хотел бы иметь что-то лучше.
Является ли эта ссылка найденной Google? Потому что совет кажется довольно здравым:
Я думаю, что эффект, который вы ищете, должен быть достигнут с помощью агрегации, а не массива. Так что на самом деле вы бы сделали что-то вроде:
@requests[remote_ip,request] = count();
... а затем:
profile:::tick-10sec
{
/* print all of the requests */
printa(@requests);
/* Nuke the requests aggregation */
trunc(@requests);
}