Guía de seguimiento dinámico de Solaris

Sondeo ERROR

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.


Ejemplo 17–1 error.d: errores de registro

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.