Handbuch zur dynamischen Ablaufverfolgung in Solaris

printa()

Die Funktion printa() dient zum Formatieren der Ergebnisse von Aggregaten in D-Programmen. Die Funktion wird in einer von zwei Formen aufgerufen:

printa(@Aggregationsname);
printa(Formatzeichenkette, @Aggregationsname);

Bei Verwendung der ersten Form erstellt der Befehl dtrace(1M) eine vollständige Momentaufnahme der Aggregatdaten und wendet auf die Ausgabe das entsprechende Standardausgabeformat für Aggregate (siehe Beschreibung in Kapitel 9Aggregate) an.

Bei Verwendung der zweiten Form erstellt der Befehl dtrace(1M) ebenfalls eine vollständige Momentaufnahme der Aggregatdaten und generiert eine Ausgabe gemäß den in der Format-Zeichenkette angegebenen Umwandlungen. Dabei gelten die folgenden Regeln:

Das folgende D-Programm stellt ein vollständiges Beispiel für printa() dar. Darin wird der Wert von caller mit dem Provider profile geprüft und die Ergebnisse werden anschließend in Form einer einfachen Tabelle ausgegeben:

profile:::profile-997
{
	@a[caller] = count();
}

END
{
	printa("%@8u %a\n", @a);
}

Wenn Sie dieses Programm mit dtrace ausführen, warten Sie einige Sekunden lang und drücken Sie dann Strg-C. Sie erhalten eine Ausgabe der Art:


# dtrace -s printa.d
^C
CPU     ID                    FUNCTION:NAME
  1      2                             :END        1 0x1
       1 ohci`ohci_handle_root_hub_status_change+0x148
       1 specfs`spec_write+0xe0
       1 0xff14f950
       1 genunix`cyclic_softint+0x588
       1 0xfef2280c
       1 genunix`getf+0xdc
       1 ufs`ufs_icheck+0x50
       1 genunix`infpollinfo+0x80
       1 genunix`kmem_log_enter+0x1e8
       ...