2010-02-23 12 views
7

To pytanie podsumowuje. "dtrace" drukuje tablicę asocjacyjną "" ma dokładnie jedno trafienie w Google, a podobne wyszukiwania są równie bezużyteczne.Jak wydrukować tablicę asocjacyjną w dtrace?

EDIT:

Gdybym miał użyć agregacji, nie jestem świadomy, że będę nadal być w stanie usunąć wpisy. Moja aplikacja wymaga, że ​​będę w stanie robić takie rzeczy jak:

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. 

wiem, że można wyczyścić całą agregację, ale co jeden wpis?

UPDATE:

Ponieważ robię to w OS X i mój wniosek jest śledzenie wszystkich deskryptorów plików, które zostały otwarte przez konkretnego procesu, udało mi się mieć tablicę 256 nazwy ścieżek, w ten sposób:

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

To jest do bani. Naprawdę chciałbym mieć coś lepszego.

Odpowiedz

1

Czy jest to this link znaleziony przez Google? Ponieważ rada wydaje się dość dźwięk:

myślę, że efekt szukasz powinien zostać osiągnięty przy użyciu agregację zamiast tablic. Więc chcesz faktycznie coś takiego:

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

... a potem:

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

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

Czy można wyczyścić pojedynczy wpis w agregacji? – Sniggerfardimungus

+0

Oh - Teraz widzę, co robisz. Agregacje nie są tym, czego potrzebujesz, chyba że zbierasz pęczek danych podczas uruchamiania dla tego klucza. Przepraszam; Źle zrozumiałem. – Don

+0

Bez problemu. Problem jest trochę trudny do złamania i mogłem być bardziej przejrzysty w moim poście ... – Sniggerfardimungus

0

wykorzystanie tablicy asocjacyjnej i sum(1) i sum(-1) zamiast count().

Powiązane problemy