El sondeo ERROR se activa cuando se produce un error de tiempo de ejecución al ejecutar una cláusula para un sondeo de DTrace. Por ejemplo, si una cláusula intenta dejar de hacer referencia a un puntero NULL, se activará el sondeo ERROR, como se muestra en el siguiente ejemplo.
BEGIN { *(char *)NULL; } ERROR { printf("Hit an error!"); }
Al ejecutar este programa, verá una salida como la siguiente:
# 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 |
La salida muestra que se ha activado el sondeo ERROR y cómo dtrace(1M) informa del error. dtrace cuenta con su propia activación del sondeo ERROR para permitirle informar de los errores. Si utiliza el sondeo ERROR, puede llevar a cabo su propia administración de errores personalizada.
Los argumentos del sondeo ERROR son los siguientes:
arg1 |
El identificador de sondeo habilitado (EPID) del sondeo que ha provocado el error. |
arg2 |
El índice de la acción que ha provocado el fallo. |
arg3 |
El desplazamiento de DIF en esa acción o -1, si no es aplicable. |
arg4 |
El tipo de fallo. |
arg5 |
El valor específico del tipo de fallo. |
La tabla siguiente describe los diversos tipos de fallos y el valor que arg5 presentará para cada uno:
Valor de arg4 |
Descripción |
Significado de arg5 |
---|---|---|
DTRACEFLT_UNKNOWN |
Tipo de fallo desconocido |
Ninguna |
DTRACEFLT_BADADDR |
Acceso a una dirección no válida o no asignada |
Dirección a la que se ha accedido |
DTRACEFLT_BADALIGN |
Acceso de memoria no alineada |
Dirección a la que se ha accedido |
DTRACEFLT_ILLOP |
Operación no permitida o no válida |
Ninguna |
DTRACEFLT_DIVZERO |
Entero dividido por cero |
Ninguna |
DTRACEFLT_NOSCRATCH |
Espacio temporal insuficiente para satisfacer la asignación temporal |
Ninguna |
DTRACEFLT_KPRIV |
Intento de acceder a una propiedad o una dirección del núcleo sin suficientes privilegios |
Dirección a la que se ha accedido o 0, si no es aplicable |
DTRACEFLT_UPRIV |
Intento de acceder a una propiedad o a una dirección de usuario sin suficientes privilegios |
Dirección a la que se ha accedido o 0, si no es aplicable |
DTRACEFLT_TUPOFLOW |
Desbordamiento de la pila de parámetros internos de DTrace |
Ninguna |
Si las acciones llevadas a cabo en el propio sondeo ERROR provocan un error, éste se omitirá de forma silenciosa; no se llamará recursivamente al sondeo ERROR.