Function: debugger-mode

debugger-mode is an interactive and byte-compiled function defined in debug.el.gz.

Signature

(debugger-mode)

Documentation

Mode for debugging Emacs Lisp using a backtrace.

A frame marked with * in the backtrace means that exiting that frame will enter the debugger. You can flag frames to enter the debugger when frame is exited with b (debugger-frame), and remove the flag with u (debugger-frame-clear).

When in debugger invoked due to exiting a frame which was flagged with a *, you can use the r (debugger-return-value) command to override the value being returned from that frame when the debugger exits.

Use M-x debug-on-entry (debug-on-entry) and M-x cancel-debug-on-entry (cancel-debug-on-entry) to control which functions will enter the debugger when called.

Complete list of commands:
# backtrace-toggle-print-circle
+ backtrace-multi-line
- backtrace-single-line
. backtrace-expand-ellipses
: backtrace-toggle-print-gensym
<backtab> backward-button
<follow-link> mouse-face
<keymap> - negative-argument
<keymap> 0 digit-argument
<keymap> 1 digit-argument
<keymap> 2 digit-argument
<keymap> 3 digit-argument
<keymap> 4 digit-argument
<keymap> 5 digit-argument
<keymap> 6 digit-argument
<keymap> 7 digit-argument
<keymap> 8 digit-argument
<keymap> 9 digit-argument
<keymap> < beginning-of-buffer
<keymap> > end-of-buffer
<keymap> ? describe-mode
<keymap> DEL scroll-down-command
<keymap> S-SPC scroll-down-command
<keymap> SPC scroll-up-command
<keymap> SPC..~ undefined
<keymap> h describe-mode
<keymap> q quit-window
<mouse-2> mouse-select-window
<mouse-2> push-button
C-M-i backward-button
C-] abort-recursive-edit
R debugger-record-expression
RET backtrace-help-follow-symbol
TAB forward-button
b debugger-frame
c debugger-continue
d debugger-step-through
e debugger-eval-expression
j debugger-jump
l debugger-list-functions
n backtrace-forward-frame
p backtrace-backward-frame
q debugger-quit
r debugger-return-value
u debugger-frame-clear
v backtrace-toggle-locals

In addition to any hooks its parent mode backtrace-mode might have run, this mode runs the hook debugger-mode-hook, as the final or penultimate step during initialization.

Probably introduced at or before Emacs version 29.1.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/debug.el.gz
(define-derived-mode debugger-mode backtrace-mode "Debugger"
  "Mode for debugging Emacs Lisp using a backtrace.
\\<debugger-mode-map>
A frame marked with `*' in the backtrace means that exiting that
frame will enter the debugger.  You can flag frames to enter the
debugger when frame is exited with \\[debugger-frame], and remove
the flag with \\[debugger-frame-clear].

When in debugger invoked due to exiting a frame which was flagged
with a `*', you can use the \\[debugger-return-value] command to
override the value being returned from that frame when the debugger
exits.

Use \\[debug-on-entry] and \\[cancel-debug-on-entry] to control
which functions will enter the debugger when called.

Complete list of commands:
\\{debugger-mode-map}"
  (add-hook 'kill-buffer-hook
            (lambda () (if (> (recursion-depth) 0) (top-level)))
            nil t)
  (use-local-map debugger-mode-map))