Handbuch zur dynamischen Ablaufverfolgung in Solaris

Interpreterdateien

Ähnlich wie die Shell und Dienstprogramme wie awk(1) und perl(1) können mit dtrace(1M) ausführbare Interpreterdateien erzeugt werden. Eine Interpreterdatei beginnt mit einer Zeile in der Form:

#! Pfadname Arg

wobei Pfadname der Pfad des Interpreters und Arg ein einzelnes, optionales Argument ist. Wenn eine Interpreterdatei ausgeführt wird, ruft das System den angegebenen Interpreter auf. Wenn Arg in der Interpreterdatei angegeben wurde, wird es dem Interpreter als Argument übergeben. Dann werden der Pfad zur Interpreterdatei selbst und etwaige bei der Ausführung zusätzlich angegebene Argumente an die Interpreter-Argumentliste angehängt. Deshalb müssen Sie DTrace-Interpreterdateien stets mit mindestens drei Argumenten erstellen:

#!/usr/sbin/dtrace -s

Wenn die Interpreterdatei ausgeführt wird, ist das Argument für die Option -s folglich der Pfadname der Interpreterdatei selbst. Anschließend wird die Datei von dtrace gelesen, kompiliert und ausgeführt, als hätten Sie den folgenden Befehl in die Shell eingegeben:


# dtrace -s Interpreter-Datei

Das folgende Beispiel zeigt, wie eine dtrace-Interpreterdatei erzeugt und ausgeführt wird. Schreiben Sie den folgenden D-Quellcode und speichern Sie ihn in einer Datei namens interp.d:

#!/usr/sbin/dtrace -s
BEGIN
{
	trace("hello");
	exit(0);
}

Kennzeichnen Sie die Datei interp.d als ausführbar und führen Sie sie wie folgt aus:


# chmod a+rx interp.d
# ./interp.d
dtrace: script './interp.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  1      1                           :BEGIN   hello
#

Denken Sie daran, dass die #!-Direktive die ersten zwei Zeichen der Datei ohne vorangestellte oder eingefügte Leerstellen enthalten muss. Der D-Compiler ignoriert diese Zeile bei der Verarbeitung der Interpreterdatei automatisch.

dtrace verarbeitet Befehlszeilenoptionen mit getopt(3C). Das bedeutet, dass in dem einzelnen Interpreterargument mehrere Optionen kombiniert werden können. Um beispielsweise die Option -q in das obige Beispiel einzufügen, ließe sich die Interpreterdirektive wie folgt abändern:

#!/usr/sbin/dtrace -qs

Bei der Angabe mehrerer Optionsbuchstaben muss die Option -s stets die Liste der booleschen Optionen abschließen, sodass das nächste Argument (der Name der Interpreterdatei) als Argument der Option -s verarbeitet wird.

Wenn Sie in der Interpreterdatei mehr als eine Option angeben müssen, die ein Argument benötigt, passen die Optionen und Argumente nicht in das einzelne Interpreter-Argument hinein. Legen Sie die Optionen in diesem Fall mit der Syntax der Direktive #pragma D option fest. Für alle dtrace-Befehlszeilenoptionen stehen Ihnen #pragma-Pendants zur Verfügung, die in Kapitel 16Optionen und Tunables aufgeführt sind.