Methods can be traced with trace
, using function names of the
form (method <name> <qualifiers> <specializers>)
. Example:
(defmethod foo ((x integer)) x) (defmethod foo :before ((x integer)) x) (trace (method foo (integer))) (trace (method foo :before (integer))) (untrace (method foo :before (integer)))
trace
and untrace
also allow a name specifier
:methods gf-form
for tracing all methods of a generic function:
(trace :methods 'foo) (untrace :methods 'foo)
Methods can also be specified for the :wherein
option to
trace
. Because this option is a name or a list of names,
methods must be specified as a list. Thus, to trace all calls of
foo
from the method bar
specialized on integer argument,
use
(trace foo :wherein ((method bar (integer))))
Before and after methods are supported as well:
(trace foo :wherein ((method bar :before (integer))))
Method profiling is done analogously to trace
:
(defmethod foo ((x integer)) x) (defmethod foo :before ((x integer)) x) (profile:profile (method foo (integer))) (profile:profile (method foo :before (integer))) (profile:unprofile (method foo :before (integer))) (profile:profile :methods 'foo) (profile:unprofile :methods 'foo) (profile:profile-all :methods t)