ToC | DocOverview | CGDoc | RelNotes | Index | PermutedIndex
| Allegro CL

| ANSI Common Lisp 9 Conditions 9.2 Dictionary of Conditions
9.2.24 *debugger-hook* | Variable
  Value Type: a designator for a function of two arguments (a condition and the value of *debugger-hook* at the time the debugger was entered), or nil. Initial Value: nil. Description: When the value of *debugger-hook* is non-nil, it is called prior to normal entry into the debugger, either due to a call to invoke-debugger or due to automatic entry into the debugger from a call to error or cerror with a condition that is not handled. The function may either handle the condition (transfer control) or return normally (allowing the standard debugger to run). To minimize recursive errors while debugging, *debugger-hook* is bound to nil by invoke-debugger prior to calling the function. Examples:
       (defun one-of (choices &optional (prompt "Choice"))
         (let ((n (length choices)) (i))
           (do ((c choices (cdr c)) (i 1 (+ i 1)))
               ((null c))
             (format t "~&[~D] ~A~%" i (car c)))
           (do () ((typep i `(integer 1 ,n)))
             (format t "~&~A: " prompt)
             (setq i (read))
             (fresh-line))
           (nth (- i 1) choices)))

       (defun my-debugger (condition me-or-my-encapsulation)
         (format t "~&Fooey: ~A" condition)
         (let ((restart (one-of (compute-restarts))))
           (if (not restart) (error "My debugger got an error."))
           (let ((*debugger-hook* me-or-my-encapsulation))
             (invoke-restart-interactively restart))))

       (let ((*debugger-hook* #'my-debugger))
         (+ 3 'a))
       Fooey: The argument to +, A, is not a number.
       [1] Supply a replacement for A.
       [2] Return to Cloe Toplevel.
       Choice: 1
       Form to evaluate and use: (+ 5 'b)
       Fooey: The argument to +, B, is not a number.
       [1] Supply a replacement for B.
       [2] Supply a replacement for A.
       [3] Return to Cloe Toplevel.
       Choice: 1
       Form to evaluate and use: 1
       9
Affected By: invoke-debugger Notes: When evaluating code typed in by the user interactively, it is sometimes useful to have the hook function bind *debugger-hook* to the function that was its second argument so that recursive errors can be handled using the same interactive facility. Allegro CL Implementation Details: None.

© Franz Inc. All Rights Reserved - File last updated 2022-07-25