trace-on-access instance &key read write slot-names break when process trace-output entrycond eval-before before backtrace => t
A CLOS instance.
A generalized boolean.
A generalized boolean.
A list of symbols, or
t
.
A generalized boolean.
A form.
A form.
A form.
A form.
A list of forms.
A list of forms.
A keyword,
t
or
nil
.
A useful debugging function which causes access to
instance
to invoke the trace facilities. Accesses include calls to
slot-value
and accessor functions defined by the class of
instance
.
The keyword arguments control which type of access are traced, and provide preconditions for tracing, code to run before access, and how to print any trace output. They are similar to those supported by the trace macro (but note that these CLOS symbols are functions, so the keyword values are evaluated immediately, unlike in trace).
read
controls whether reading slots is traced. The default is
t
.
write
controls whether writing slots is traced. The default is
t
.
slot-names
controls which slots to trace access for. It can be a list of symbols which are the slot-names. The default value,
t
, means trace access to all slots.
break
controls whether the debugger is entered when a traced slot in
instance
is accessed. When
nil
, the debugger is not invoked and messages are printed to
*trace-output*
. The default value is
nil
.
when
is evaluated during slot access to determine whether any tracing should occur. The default value is
t
.
process
is evaluated during slot access to determine whether any tracing should occur in the current process. The form should evaluate to either
nil
(meaning trace in all processes), a string naming the process in which tracing should occur (see process-name, find-process-from-name), or a list of strings naming the processes in which tracing should occur. The default value is
nil
.
trace-output
is evaluated during slot access to determine the stream on which to print tracing messages. If this is
nil
then the value of
*trace-output*
is used. The default value is
nil
.
entrycond is evaluated during slot access to determine whether the default tracing messages should be printed.
eval-before is a list of forms which are evaluated during slot access.
before is a list of forms which are evaluated during slot access. The first value returned by each form is printed.
backtrace
controls what kind of backtrace to print. If this is
nil
then no backtrace is printed, and this is the default value. Otherwise it can be any of the following values:
Like the
:bq
debugger command.
Like the
:b
debugger command.
Like the
:b :verbose
debugger command.
Like the
:bug-form
debugger command.
Other instances of the same class are unaffected and you can remove the trace by calling untrace-on-access.
The variable *traced-arglist* is bound to a list of arguments for the slot access during evaluation of the options above, that is ( instance slot-name ) when reading a slot and ( new-value instance slot-name ) when writing a slot.
A common use of this function is to find where a slot is being changed in a complex program.
This function, when called with
:break t
, replaces the deprecated function break-on-access.