Oracle® Solaris 11.2 Dynamic Tracing Guide

Exit Print View

Updated: July 2014
 
 

ERROR Probe

The ERROR probe fires when a run-time error occurs in executing a clause for a DTrace probe. For example, if a clause attempts to dereference a NULL pointer, the ERROR probe will fire, as shown in the following example.

Example 11-1  error.d: Record Errors
BEGIN
{
*(char *)NULL;
}

ERROR
{
printf("Hit an error!");
}

When you run this program, you will see output like the following example:

# 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

The output shows that the ERROR probe fired, and also illustrates dtrace(1M) reporting the error. dtrace has its own enabling of the ERROR probe to allow it to report errors. Using the ERROR probe, you can create your own custom error handling.

The arguments to the ERROR probe are as follows:

arg1
The enabled probe identifier (EPID) of the probe that caused the error
arg2
The index of the action that caused the fault
arg3
The DIF offset into that action or -1 if not applicable
arg4
The fault type
arg5
Value particular to the fault type

The table below describes the various fault types and the value that arg5 will have for each:

arg4 Value
Description
arg5 Meaning
DTRACEFLT_UNKNOWN
Unknown fault type
None
DTRACEFLT_BADADDR
Access to unmapped or invalid address
Address accessed
DTRACEFLT_BADALIGN
Unaligned memory access
Address accessed
DTRACEFLT_ILLOP
Illegal or invalid operation
None
DTRACEFLT_DIVZERO
Integer divide by zero
None
DTRACEFLT_NOSCRATCH
Insufficient scratch space to satisfy scratch allocation
None
DTRACEFLT_KPRIV
Attempt to access a kernel address or property without sufficient privileges
Address accessed or 0 if not applicable
DTRACEFLT_UPRIV
Attempt to access a user address or property without sufficient privileges
Address accessed or 0 if not applicable
DTRACEFLT_TUPOFLOW
DTrace internal parameter stack overflow
None
DTRACEFLT_BADSTACK
Invalid user process stack
Address of invalid stack pointer

If the actions taken in the ERROR probe itself cause an error, that error is silently dropped — the ERROR probe will not be recursively invoked.