Manuel de suivi dynamique Solaris

Sonde ERROR

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.


Exemple 17–1 error.d: erreurs d'enregistrement

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.