2010-02-23 2 views
7

La domanda praticamente riassume tutto. "dtrace 'stampa un array associativo" "ha esattamente un hit su google e le ricerche simili sono ugualmente inutili.Come si stampa un array associativo in dtrace?

EDIT:

Se dovessi usare un'aggregazione, non sono consapevoli del fatto che sarei ancora in grado di rimuovere le voci. La mia applicazione richiede che io sia in grado di fare cose come:

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. 

so che è possibile cancellare un intero aggregazione, ma che dire di una singola voce?

UPDATE:

Dal momento che sto facendo questo in OS X e la mia domanda è quello di monitorare tutte le descrittori di file che sono stati aperti da un particolare processo, sono stato in grado di avere una serie di 256 pathnames, soly:

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... 

Fa schifo. Mi piacerebbe davvero avere qualcosa di meglio.

risposta

1

È this il collegamento trovato Google? Perché il consiglio sembra abbastanza suono:

penso che l'effetto che stai cercando dovrebbe essere raggiunto utilizzando un aggregazione piuttosto che un array. Così si sarebbe effettivamente fare qualcosa di simile:

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

... e poi:

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

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

È possibile cancellare una singola voce in un'aggregazione? – Sniggerfardimungus

+0

Oh, ora vedo quello che stai facendo. Le aggregazioni non sono ciò che si desidera a meno che non si raccolga una serie di dati durante la corsa per quella chiave. Scusate; Ho frainteso. – Don

+0

Nessun problema. Il problema è un po 'difficile da decifrare e avrei potuto essere più chiaro nel mio post ... – Sniggerfardimungus

0

Utilizzare un array associativo e sum(1) e sum(-1) invece di count().