diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2022-05-01 13:40:13 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2022-05-01 13:40:13 +0200 |
commit | 7c8bec9e1ffe087918f6f218fc4560fc968aebb2 (patch) | |
tree | 2546ec6c38b293890826a0b93e2f66a2ea8f7e2f /lisp/emacs-lisp | |
parent | 81ce4b0e4ee18520f174cc5b46219e4475fcc956 (diff) | |
download | emacs-7c8bec9e1ffe087918f6f218fc4560fc968aebb2.tar.gz emacs-7c8bec9e1ffe087918f6f218fc4560fc968aebb2.tar.bz2 emacs-7c8bec9e1ffe087918f6f218fc4560fc968aebb2.zip |
Don't enter the debugger from *Backtrace* or edebug on eval errors
* doc/lispref/debugging.texi (Error Debugging): Document it.
* doc/lispref/edebug.texi (Edebug Eval): Mention it.
* lisp/emacs-lisp/debug.el (debug-allow-recursive-debug): New user
option (bug#36145).
(debugger-eval-expression): Use it.
* lisp/emacs-lisp/edebug.el (edebug-eval-expression): Ditto.
This patch is based on a patch by Noam Postavsky.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/debug.el | 13 | ||||
-rw-r--r-- | lisp/emacs-lisp/edebug.el | 5 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 46b0306d64f..91e9b0716d0 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el @@ -90,6 +90,11 @@ The value used here is passed to `quit-restore-window'." :group 'debugger :version "24.3") +(defcustom debug-allow-recursive-debug nil + "If non-nil, erroring in debug and edebug won't recursively debug." + :type 'boolean + :version "29.1") + (defvar debugger-step-after-exit nil "Non-nil means \"single-step\" after the debugger exits.") @@ -534,7 +539,13 @@ The environment used is the one when entering the activation frame at point." (error 0)))) ;; If on first line. (base (debugger--backtrace-base))) (debugger-env-macro - (let ((val (backtrace-eval exp nframe base))) + (let ((val (if debug-allow-recursive-debug + (backtrace-eval exp nframe base) + (condition-case err + (backtrace-eval exp nframe base) + (error (format "%s: %s" + (get (car err) 'error-message) + (car (cdr err)))))))) (prog1 (debugger--print val t) (let ((str (eval-expression-print-format val))) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 722283b88ff..85545f9f351 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -57,6 +57,7 @@ (require 'cl-lib) (require 'seq) (eval-when-compile (require 'pcase)) +(require 'debug) ;;; Options @@ -3713,7 +3714,9 @@ Print result in minibuffer." (interactive (list (read--expression "Eval: "))) (princ (edebug-outside-excursion - (let ((result (edebug-eval expr))) + (let ((result (if debug-allow-recursive-debug + (edebug-eval expr) + (edebug-safe-eval expr)))) (values--store-value result) (concat (edebug-safe-prin1-to-string result) (eval-expression-print-format result)))))) |