2010-02-23 9 views
7

La pregunta resume más o menos hacia arriba. "dtrace" imprime una matriz asociativa "" tiene exactamente un hit de google y las búsquedas similares son igualmente inútiles.¿Cómo se imprime una matriz asociativa en dtrace?

EDIT:

Si tuviera que utilizar una agregación, no soy consciente de que todavía me gustaría ser capaz de eliminar las entradas. Mi aplicación requiere que yo sea capaz de hacer cosas como:

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. 

que conozco que se puede borrar toda una agregación, pero ¿qué pasa con una sola entrada?

ACTUALIZACIÓN:

Desde que estoy haciendo esto en OS X y mi solicitud es para el seguimiento de todos los descriptores de archivos que hayan sido abiertos por un proceso particular, yo era capaz de tener una serie de 256 nombres de ruta, por lo tanto:

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

Es una mierda. Realmente me gustaría tener algo mejor.

Respuesta

1

Es this el enlace de Google ha encontrado? Porque el consejo parece bastante bueno:

Creo que el efecto que está buscando debe lograrse mediante el uso de una agregación en lugar de una matriz. Así que es realmente hacer algo como:

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

... y luego:

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

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

¿Se puede borrar una entrada individual en una agregación? – Sniggerfardimungus

+0

Oh, ahora veo lo que estás haciendo. Las agregaciones no son lo que quieres, a menos que recopiles una gran cantidad de datos durante la ejecución de esa clave. Lo siento; Entendí mal. – Don

+0

No hay problema. El problema es un poco difícil de descifrar y podría haber sido más claro en mi post ... – Sniggerfardimungus

0

utiliza un arreglo asociativo y sum(1) y sum(-1) en lugar de count().

Cuestiones relacionadas