Invoking the Debugger
Here we describe in full detail the function debug that is used to invoke the debugger.
- Command: debug &rest debugger-args
-
This function enters the debugger. It switches buffers to a buffer named *Backtrace* (or *Backtrace*<2> if it is the second recursive entry to the debugger, etc.), and fills it with information about the stack of Lisp function calls. It then enters a recursive edit, showing the backtrace buffer in Debugger mode.
The Debugger mode c, d, j, and r commands exit the recursive edit; then
debugswitches back to the previous buffer and returns to whatever calleddebug. This is the only way the functiondebugcan return to its caller.The use of the debugger-args is that
debugdisplays the rest of its arguments at the top of the *Backtrace* buffer, so that the user can see them. Except as described below, this is the only way these arguments are used.However, certain values for first argument to
debughave a special significance. (Normally, these values are used only by the internals of Emacs, and not by programmers callingdebug.) Here is a table of these special values:lambda-
A first argument of
lambdameansdebugwas called because of entry to a function whendebug-on-next-callwas non-nil. The debugger displays ‘Debugger entered--entering a function:’ as a line of text at the top of the buffer. debug-
debugas first argument meansdebugwas called because of entry to a function that was set to debug on entry. The debugger displays the string ‘Debugger entered--entering a function:’, just as in thelambdacase. It also marks the stack frame for that function so that it will invoke the debugger when exited. t-
When the first argument is
t, this indicates a call todebugdue to evaluation of a function call form whendebug-on-next-callis non-nil. The debugger displays ‘Debugger entered--beginning evaluation of function call form:’ as the top line in the buffer. exit-
When the first argument is
exit, it indicates the exit of a stack frame previously marked to invoke the debugger on exit. The second argument given todebugin this case is the value being returned from the frame. The debugger displays ‘Debugger entered--returning value:’ in the top line of the buffer, followed by the value being returned. error-
When the first argument is
error, the debugger indicates that it is being entered because an error orquitwas signaled and not handled, by displaying ‘Debugger entered--Lisp error:’ followed by the error signaled and any arguments tosignal. For example,(let ((debug-on-error t)) (/ 1 0))
------ Buffer: *Backtrace* ------ Debugger entered--Lisp error: (arith-error) /(1 0) ... ------ Buffer: *Backtrace* ------
If an error was signaled, presumably the variable
debug-on-erroris non-nil. Ifquitwas signaled, then presumably the variabledebug-on-quitis non-nil. nilUse
nilas the first of the debugger-args when you want to enter the debugger explicitly. The rest of the debugger-args are printed on the top line of the buffer. You can use this feature to display messages—for example, to remind yourself of the conditions under whichdebugis called.
Copyright © 1990-1996, 1998-2021 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Invoking-the-Debugger.html