Handbuch zur dynamischen Ablaufverfolgung in Solaris

Definieren von Providern und Prüfpunkten

Sie definieren DTrace-Prüfpunkte in einer .d-Quelldatei, auf die später bei der Kompilierung und Verknüpfung der Anwendung zurückgegriffen wird. Wählen Sie zuerst einen geeigneten Namen für den Provider Ihrer Benutzeranwendung. Für jeden Prozess, der den Anwendungscode ausführt, wird die jeweilige Prozess-ID an den gewählten Providernamen angehängt. Wenn Sie beispielsweise für einen Webserver, der einen Prozess mit der ID 1203 ausführt, den Providernamen myserv wählen, dann lautet der DTrace-Providername für diesen Prozess myserv1203. Fügen Sie der .d-Quelldatei eine Providerdefinition wie in diesem Beispiel hinzu:

provider myserv {
	...
};			

Als Nächstes fügen Sie für jeden Prüfpunkt eine Definition und die entsprechenden Argumente hinzu. Im folgenden Beispiel werden die beiden unter Auswahl der Prüfpunktstellen behandelten Prüfpunkte definiert. Der erste Prüfpunkt besitzt zwei Argumente des Typs string, der zweite hat kein Argument. Der D-Compiler wandelt zwei aufeinander folgende Unterstriche (__) in jedem Prüfpunktnamen in einen Bindestrich um (-).

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};

Um den Verbrauchern der Prüfpunkte Auskunft über die Wahrscheinlichkeit einer Änderung in künftigen Versionen der Anwendung zu erteilen, sollten Sie Stabilitätsattribute in die Providerdefinition aufnehmen. In Kapitel 39Stabilität finden Sie nähere Informationen zu den Stabilitätsattributen in DTrace. Das folgende Beispiel zeigt die Definition von Stabilitätsattributen:


Beispiel 34–1 myserv.d: Statisch definierte Anwendungsprüfpunkte

#pragma D attributes Evolving/Evolving/Common provider myserv provider
#pragma D attributes Private/Private/Unknown provider myserv module
#pragma D attributes Private/Private/Unknown provider myserv function
#pragma D attributes Evolving/Evolving/Common provider myserv name
#pragma D attributes Evolving/Evolving/Common provider myserv args

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};


Hinweis –

D-Skripten, die nicht ganzzahlige Argumente aus benutzerdefinierten Prüfpunkten verwenden, müssen diese Argumente mithilfe der Funktionen copyin() und copyinstr() abrufen. Weitere Informationen finden Sie in Kapitel 33Ablaufverfolgung von Benutzerprozessen.