Die Frage fasst es ziemlich zusammen. "dtrace 'druckt ein assoziatives Array'" hat genau einen Google-Treffer und die ähnlichen Suchanfragen sind ebenfalls nutzlos.Wie druckst du ein assoziatives Array in Dtrace?
EDIT:
Wenn ich eine Aggregation verwenden war, ich bin mir nicht bewusst, dass ich noch in der Lage sein würde Einträge zu entfernen. Meine Anwendung erfordert, dass ich in der Lage sein, die Dinge zu tun, wie:
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.
Ich weiß, dass Sie eine ganze Aggregation löschen kann, aber was ist mit einem einzigen Eintrag?
UPDATE:
Da ich dies in OS X mache und meine Anwendung ist alle der Datei-Deskriptoren zu verfolgen, die von einem bestimmten Prozess geöffnet wurden, konnte ich ein Array von 256 haben Pfadnamen, so:
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 saugt. Ich möchte wirklich etwas besseres haben.
Können Sie einen einzelnen Eintrag in einer Aggregation löschen? – Sniggerfardimungus
Oh - ich sehe jetzt, was du tust. Aggregationen sind nicht das, was Sie wollen, es sei denn, Sie sammeln eine Menge Daten über den Lauf für diesen Schlüssel. Es tut uns leid; Ich habe es falsch verstanden. – Don
Kein Problem. Das Problem ist ein bisschen eine harte Nuss zu knacken und ich hätte klarer in meinem Beitrag sein können ... – Sniggerfardimungus