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 17-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 |
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.