Breaking

If you need a more detail view of runtime behavior, you might want to BREAK some functions you care about.

(trace (foo :break-all t))  

  This will invoke the debugger each time foo is called,                   
  and upon each exit from foo.

Once you arrive in the debugger, the following commands are most useful:

 :down <n>    Move to a deeper frame  <n> is optional
 :up <n>      Move to a higher frame  <n> is optional
 :zoom <n>    Display n frames        <n> is optional

 :pri         Enter a dialog that lets you set printer 
              control variables.  For example, setting depth
              to 5 and length to 10 will let you see the
              top level structure of expressions, while 
              suppressing deep expressions and the tails of
              long expressions.  Note that you'll need to 
              specify values for many contexts, but just 
              hitting return leaves a value unchanged.  You
              will likely want to modify the trace, debugger,
              and current values.  

 (pprint *)   Pretty print the expression for the current
              frame.  Note that this only works immediately
              after arriving at a frame, e.g. via :down 0
              if necessary.

 :cont        Continue as if nothing happened.
 :restart     Resume execution at this frame.
 :reset       Return to Lisp top level.  (E.g., bail out
              to try again.)
 :exit        Exit from Lisp to operating system -- ends
              session.

 :help        Online documentation.

 (misc ...)   The debugger is is a read/eval/print loop, so
              arbitrary Lisp forms will be evaluated (in the
              current dynamic context).

 (untrace foo)  Stop entering debugger when foo is called.
                Note that you may still enter the debugger
                for each exit from calls to foo already 
                recursively in progress.