Consider this definition of the factorial function:
This debugger session demonstrates the use of breakpoints:(defun ! (n) (if (zerop n) 1 (* n (! (1- n)))))
common-lisp-user> (break) ; Invoke debuggerBreak
Restarts: 0: [CONTINUE] Return from BREAK. 1: [ABORT ] Return to Top-Level.
Debug (type H for help)
(INTERACTIVE-EVAL (BREAK)) 0] ll #'! 0: #'(LAMBDA (N) (BLOCK ! (IF # 1 #))) 1: (ZEROP N) 2: (* N (! (1- N))) 3: (1- N) 4: (! (1- N)) 5: (* N (! (1- N))) 6: #'(LAMBDA (N) (BLOCK ! (IF # 1 #))) 0] br 2 (* N (! (1- N))) 1: 2 in ! Added. 0] q
common-lisp-user> (! 10) ; Call the function
*Breakpoint hit*
Restarts: 0: [CONTINUE] Return from BREAK. 1: [ABORT ] Return to Top-Level.
Debug (type H for help)
(! 10) ; We are now in first call (arg 10) before the multiply Source: (* N (! (1- N))) 3] st
*Step*
(! 10) ; We have finished evaluation of (1- n) Source: (1- N) 3] st
*Breakpoint hit*
Restarts: 0: [CONTINUE] Return from BREAK. 1: [ABORT ] Return to Top-Level.
Debug (type H for help)
(! 9) ; We hit the breakpoint in the recursive call Source: (* N (! (1- N))) 3]