2010-02-23 3 views
7

Вопрос в значительной степени суммирует его. «dtrace» печатает ассоциативный массив «» имеет ровно один хит google, и аналогичные поиски одинаково бесполезны.Как вы печатаете ассоциативный массив в dtrace?

EDIT:

Если бы я должен был использовать агрегацию, я не знаю, что я по-прежнему иметь возможность удалять записи. Мое приложение требует, чтобы я быть в состоянии делать такие вещи, как:

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. 

Я знаю, что вы можете очистить всю агрегацию, но как насчет одной записи?

UPDATE:

Поскольку я делаю это в 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... 

Это отстой. Мне бы очень хотелось, чтобы у меня было что-то лучше.

ответ

1

Is this ссылка Google найдена? Поскольку совет кажется довольно звук:

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

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

... а потом:

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

    /* Nuke the requests aggregation */ 
    trunc(@requests); 
} 
+0

Можете ли вы очистить одну запись в агрегации? – Sniggerfardimungus

+0

О, я сейчас вижу, что вы делаете. Агрегации - это не то, что вам нужно, если вы не собираете кучу данных за прогон для этого ключа. Сожалею; Я неправильно понял. – Don

+0

Нет проблем. Проблема в том, что у меня крутой ореол, и я мог бы быть более ясным в своем посте ... – Sniggerfardimungus

0

Используйте ассоциативный массив и sum(1) и sum(-1) вместо count().

Смежные вопросы