* lisp/emacs-lisp/debug.el (debug): Don't hang upon error in initial-frame.
This commit is contained in:
parent
7bedc8812b
commit
7228488eff
1 changed files with 24 additions and 4 deletions
|
@ -145,9 +145,29 @@ You may call with no args, or you may pass nil as the first arg and
|
|||
any other args you like. In that case, the list of args after the
|
||||
first will be printed into the backtrace buffer."
|
||||
(interactive)
|
||||
(if inhibit-redisplay
|
||||
;; Don't really try to enter debugger within an eval from redisplay.
|
||||
debugger-value
|
||||
(cond
|
||||
(inhibit-redisplay
|
||||
;; Don't really try to enter debugger within an eval from redisplay.
|
||||
debugger-value)
|
||||
((and (eq t (framep (selected-frame)))
|
||||
(equal "initial_terminal" (terminal-name)))
|
||||
;; We're in the initial-frame (where `message' just outputs to stdout) so
|
||||
;; there's no tty or GUI frame to display the backtrace and interact with
|
||||
;; it: just dump a backtrace to stdout.
|
||||
;; This happens for example while handling an error in code from
|
||||
;; early-init.el with --debug-init.
|
||||
(message "Error: %S" args)
|
||||
(let ((print-escape-newlines t)
|
||||
(print-escape-control-characters t)
|
||||
(print-level 8)
|
||||
(print-length 50)
|
||||
(skip t)) ;Skip the first frame (i.e. the `debug' frame)!
|
||||
(mapbacktrace (lambda (_evald func args _flags)
|
||||
(if skip
|
||||
(setq skip nil)
|
||||
(message " %S" (cons func args))))
|
||||
'debug)))
|
||||
(t
|
||||
(unless noninteractive
|
||||
(message "Entering debugger..."))
|
||||
(let (debugger-value
|
||||
|
@ -272,7 +292,7 @@ first will be printed into the backtrace buffer."
|
|||
(with-timeout-unsuspend debugger-with-timeout-suspend)
|
||||
(set-match-data debugger-outer-match-data)))
|
||||
(setq debug-on-next-call debugger-step-after-exit)
|
||||
debugger-value)))
|
||||
debugger-value))))
|
||||
|
||||
(defun debugger--print (obj &optional stream)
|
||||
(condition-case err
|
||||
|
|
Loading…
Add table
Reference in a new issue