Der Prüfpunkt ERROR wird ausgelöst, wenn bei der Ausführung einer Klausel für einen DTrace-Prüfpunkt ein Laufzeitfehler auftritt. Wenn beispielsweise mit einer Klausel versucht wird, einen NULL-Zeiger zu dereferenzieren, wird der Prüfpunkt ERROR, wie das nächste Beispiel veranschaulicht, ausgelöst.
BEGIN { *(char *)NULL; } ERROR { printf("Hit an error!"); }
Wenn Sie dieses Programm ausführen, erhalten Sie eine Ausgabe wie die folgende:
# dtrace -s ./error.d dtrace: script './error.d' matched 2 probes CPU ID FUNCTION:NAME 2 3 :ERROR Hit an error! dtrace: error on enabled probe ID 1 (ID 1: dtrace:::BEGIN): invalid address (0x0) in action #1 at DIF offset 12 dtrace: 1 error on CPU 2 |
Die Ausgabe zeigt, dass der Prüfpunkt ERROR ausgelöst wurde und veranschaulicht, wie dtrace(1M) den Fehler meldet. dtrace besitzt eine eigene Aktivierung des Prüfpunkts ERROR, die es ihm ermöglicht, Fehler zu melden. In Verbindung mit dem Prüfpunkt ERROR können Sie eine benutzerdefinierte Fehlerbehandlung einrichten.
Die Argumente für den Prüfpunkt ERROR lauten:
arg1 |
Die EPID (ID des aktivierten Prüfpunkts) des Prüfpunkts, der den Fehler verursacht hat |
arg2 |
Der Index der Aktion, die den Fehler verursacht hat |
arg3 |
Der DIF-Versatz innerhalb dieser Aktion oder -1, wenn nicht zutreffend |
arg4 |
Der Fehlertyp |
arg5 |
Für den Fehlertyp spezifischer Wert |
Die nachfolgende Tabelle beschreibt die verschiedenen Fehlertypen und den Wert, den arg5 je Typ annimmt:
Wert arg4 |
Beschreibung |
Bedeutung arg5 |
---|---|---|
DTRACEFLT_UNKNOWN |
Unbekannter Fehlertyp |
Keinen |
DTRACEFLT_BADADDR |
Zugriff auf nicht zugeordnete oder ungültige Adresse |
Adresse, auf die zugegriffen wurde |
DTRACEFLT_BADALIGN |
Zugriff auf nicht ausgerichteten Speicher |
Adresse, auf die zugegriffen wurde |
DTRACEFLT_ILLOP |
Unzulässiger oder ungültiger Vorgang |
Keinen |
DTRACEFLT_DIVZERO |
Division einer Ganzzahl durch Null |
Keinen |
DTRACEFLT_NOSCRATCH |
Nicht genügend Scratch-Platz für Scratch-Speicherzuweisung |
Keinen |
DTRACEFLT_KPRIV |
Versuchter Zugriff auf eine Kerneladresse oder -Eigenschaft ohne ausreichende Rechte |
Adresse, auf die zugegriffen wurde, oder 0, wenn nicht zutreffend |
DTRACEFLT_UPRIV |
Versuchter Zugriff auf eine Benutzeradresse oder -Eigenschaft ohne ausreichende Rechte |
Adresse, auf die zugegriffen wurde, oder 0, wenn nicht zutreffend |
DTRACEFLT_TUPOFLOW |
DTrace-interner Parameter-Stacküberlauf |
Keinen |
Wenn die im Prüfpunkt ERROR selbst durchgeführten Aktionen einen Fehler verursachen, wird dieser Fehler kommentarlos verworfen - der Prüfpunkt ERROR wird nicht rekursiv aufgerufen.