The following are event specifications, syntax, and descriptions for system events.
These events are fired after a dlopen() or a dlclose() call succeeds. A dlopen() or dlclose() call can cause more than one library to be loaded. The list of these libraries is always available in the predefined variable $dllist. The first word in $dllist is actually a "+" or a "-", indicating whether the list of libraries is being added or deleted.
lib-path is the name of a shared library you are interested in. If it is specified, the event only fires if the given library was loaded or unloaded. In that case $dlobj contains the name of the library. $dllist is still available.
If lib-path begins with a /, a full string match is performed. Otherwise, only the tails of the paths are compared.
If lib-path is not specified, then the events always occur whenever there is any dl-activity. In this case, $dlobj is empty but $dllist is valid.
This event fires when the specified fault occurs. The faults are architecture dependent, but a set of them is known to dbx as defined by proc(4):
FLTILL |
Illegal instruction |
FLTPRIV |
Privileged instruction |
FLTBPT |
Breakpoint instruction |
FLTTRACE* |
Trace trap (single step) |
FLTACCESS* |
Memory access (such as alignment) |
FLTBOUNDS* |
Memory bounds (invalid address) |
FLTIOVF |
Integer overflow |
FLTIZDIV |
Integer zero divide |
FLTPE |
Floating-point exception |
FLTSTACK |
Irrecoverable stack fault |
FLTPAGE |
Recoverable page fault |
Be aware that BPT, TRACE, and BOUNDS are used by dbx to implement breakpoints, single-stepping, and watchpoints. Handling them may interfere with the inner workings of dbx.
These faults are taken from /sys/fault.h. fault can be any of those listed above, in upper or lower case, with or without the FLT- prefix, or the actual numerical code.
Fired when lwp has been exited. $lwp contains the id of the exited LWP.
This event occurs when the signal is first delivered to the debugee. sig can either be a decimal number or the signal name in upper or lower case; the prefix is optional. This is completely independent of the catch/ignore commands, although the catch command can be implemented as follows:
function simple_catch { when sig $1 { stop; echo Stopped due to $sigstr $sig whereami } }
When the sig event is received, the process has not seen it yet. Only if you cont the process with the given signal is the signal forwarded to it.
When the specified signal with the specified sub-code is first delivered to the child, this event fires. Just as with signals, the sub-code can be entered as a decimal number, in capital or lower case; the prefix is optional.
The specified system call has just been initiated and the process has entered kernel mode.
The concept of system call supported by dbx is that provided by procfs(4). These are traps into the kernel as enumerated in /usr/include/sys/syscall.h.
This is not the same as the ABI notion of system calls. Some ABI system calls are partially implemented in user mode and use non-ABI kernel traps. However, most of the generic system calls (the main exception being signal handling) are the same between syscall.h and the ABI.
The specified system call is finished and the process is about to return to user mode.
Without arguments, all system calls are traced. Note that certain dbx features, for example modify event and RTC, cause the child to execute system calls for their own purposes and show up if traced.