La sonde ERROR se déclenche lorsqu'une erreur d'exécution se produit lors du déclenchement d'une clause pour une sonde DTrace. Par exemple, si une clause tente de déréférencer un pointeur NULL, la sonde ERROR se déclenche, comme illustré dans l'exemple suivant.
BEGIN { *(char *)NULL; } ERROR { printf("Hit an error!"); }
Lorsque vous exécutez ce programme, la sortie qui s'affiche est similaire à l'exemple suivant :
# 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 |
Le résultat montre que la sonde ERROR s'est déclenchée et illustre également dtrace(1M) consignant l'erreur dans un rapport. dtrace dispose de sa propre activation de la sonde ERROR pour lui permettre de consigner les erreurs dans un rapport. En utilisant la sonde ERROR, vous pouvez créer votre propre gestion d'erreurs personnalisée.
Les arguments vers la sondeERROR se présentent comme suit :
arg1 |
L'identificateur de sonde activée (EPID) de la sonde à l'origine de l'erreur. |
arg2 |
L'index de l'action ayant provoqué l'erreur. |
arg3 |
Le décalage DIF de cette action ou -1 s'il ne s'applique pas. |
arg4 |
Le type d'erreur. |
arg5 |
La valeur particulière de ce type d'erreur. |
Le tableau ci-dessous décrit les différents types d'erreur et la valeur que prend arg5 pour chacun :
Valeur arg4 |
Description |
Signification arg5 |
---|---|---|
DTRACEFLT_UNKNOWN |
Type d'erreur inconnu |
Aucune |
DTRACEFLT_BADADDR |
Accès à une adresse non valide ou non mappée |
Adresse accédée |
DTRACEFLT_BADALIGN |
Accès à une mémoire non alignée |
Adresse accédée |
DTRACEFLT_ILLOP |
Opération non valide ou illégale |
Aucune |
DTRACEFLT_DIVZERO |
Nombre entier divisé par zéro |
Aucune |
DTRACEFLT_NOSCRATCH |
Espace de travail insuffisant pour répondre à l'allocation de travail |
Aucune |
DTRACEFLT_KPRIV |
Tentative d'accès à une propriété ou une adresse de noyau avec des privilèges insuffisants. |
Adresse accédée ou 0 si cela ne s'applique pas. |
DTRACEFLT_UPRIV |
Tentative d'accès à une propriété ou une adresse utilisateur avec des privilèges insuffisants. |
Adresse accédée ou 0 si cela ne s'applique pas. |
DTRACEFLT_TUPOFLOW |
Dépassement de capacité de la pile du paramètre interne DTrace |
Aucune |
Si les actions effectuées dans la sonde ERROR elle-même sont à l'origine d'une erreur, celle-ci est abandonnée de manière silencieuse — la sonde ERROR n'est pas appelée récursivement.