Как Вы печатаете ассоциативный массив в dtrace?

Вопрос в значительной степени подводит итог его. "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...

Это сосет. Я действительно хотел бы иметь что-то лучше.

7
задан Sniggerfardimungus 24 February 2010 в 19:08
поделиться

1 ответ

Является ли эта ссылка найденной Google? Потому что совет кажется довольно здравым:

Я думаю, что эффект, который вы ищете, должен быть достигнут с помощью агрегации, а не массива. Так что на самом деле вы бы сделали что-то вроде:

@requests[remote_ip,request] = count();

... а затем:

profile:::tick-10sec
{
    /* print all of the requests */
    printa(@requests);

    /* Nuke the requests aggregation */
    trunc(@requests);
}
1
ответ дан 7 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: