@@ -168,158 +168,150 @@ first will be printed into the backtrace buffer.
168
168
If `inhibit-redisplay' is non-nil when this function is called,
169
169
the debugger will not be entered."
170
170
(interactive )
171
- (cond
172
- (inhibit-redisplay
173
- ; ; Don't really try to enter debugger within an eval from redisplay.
174
- debugger-value)
175
- ((and (eq t (framep (selected-frame )))
176
- (equal " initial_terminal" (terminal-name )))
177
- ; ; We're in the initial-frame (where `message' just outputs to stdout) so
178
- ; ; there's no tty or GUI frame to display the backtrace and interact with
179
- ; ; it: just dump a backtrace to stdout.
180
- ; ; This happens for example while handling an error in code from
181
- ; ; early-init.el with --debug-init.
182
- (message " Error: %S " args)
183
- (let ((print-escape-newlines t )
184
- (print-escape-control-characters t )
185
- (print-level 8 )
186
- (print-length 50 )
187
- (skip t )) ; Skip the first frame (i.e. the `debug' frame)!
188
- (mapbacktrace (lambda (_evald func args _flags )
189
- (if skip
190
- (setq skip nil )
191
- (message " %S " (cons func args))))
192
- 'debug )))
193
- (t
194
- (unless noninteractive
195
- (message " Entering debugger... " ))
196
- (let (debugger-value
197
- (debugger-previous-state
198
- (if (get-buffer " *Backtrace*" )
199
- (with-current-buffer (get-buffer " *Backtrace*" )
200
- (debugger--save-buffer-state))))
201
- (debugger-args args)
202
- (debugger-buffer (get-buffer-create " *Backtrace*" ))
203
- (debugger-old-buffer (current-buffer ))
204
- (debugger-window nil )
205
- (debugger-step-after-exit nil )
206
- (debugger-will-be-back nil )
207
- ; ; Don't keep reading from an executing kbd macro!
208
- (executing-kbd-macro nil )
209
- ; ; Save the outer values of these vars for the `e' command
210
- ; ; before we replace the values.
211
- (debugger-outer-match-data (match-data ))
212
- (debugger-with-timeout-suspend (with-timeout-suspend )))
213
- ; ; Set this instead of binding it, so that `q'
214
- ; ; will not restore it.
215
- (setq overriding-terminal-local-map nil )
216
- ; ; Don't let these magic variables affect the debugger itself.
217
- (let ((last-command nil ) this-command track-mouse
218
- (inhibit-trace t )
219
- unread-command-events
220
- unread-post-input-method-events
221
- last-input-event last-command-event last-nonmenu-event
222
- last-event-frame
223
- overriding-local-map
224
- load-read-function
225
- ; ; If we are inside a minibuffer, allow nesting
226
- ; ; so that we don't get an error from the `e' command.
227
- (enable-recursive-minibuffers
228
- (or enable-recursive-minibuffers (> (minibuffer-depth ) 0 )))
229
- (standard-input t ) (standard-output t )
230
- inhibit-redisplay
231
- (cursor-in-echo-area nil )
232
- (window-configuration (current-window-configuration )))
233
- (unwind-protect
234
- (save-excursion
235
- (when (eq (car debugger-args) 'debug )
236
- ; ; Skip the frames for backtrace-debug, byte-code,
237
- ; ; debug--implement-debug-on-entry and the advice's `apply' .
238
- (backtrace-debug 4 t )
239
- ; ; Place an extra debug-on-exit for macro's.
240
- (when (eq 'lambda (car-safe (cadr (backtrace-frame 4 ))))
241
- (backtrace-debug 5 t )))
242
- (with-current-buffer debugger-buffer
243
- (unless (derived-mode-p 'debugger-mode )
244
- (debugger-mode ))
245
- (debugger-setup-buffer debugger-args)
246
- (when noninteractive
247
- ; ; If the backtrace is long, save the beginning
248
- ; ; and the end, but discard the middle.
249
- (when (> (count-lines (point-min ) (point-max ))
250
- debugger-batch-max-lines)
251
- (goto-char (point-min ))
252
- (forward-line (/ 2 debugger-batch-max-lines))
253
- (let ((middlestart (point )))
254
- (goto-char (point-max ))
255
- (forward-line (- (/ 2 debugger-batch-max-lines)
256
- debugger-batch-max-lines))
257
- (delete-region middlestart (point )))
258
- (insert " ...\n " ))
259
- (goto-char (point-min ))
260
- (message " %s " (buffer-string ))
261
- (kill-emacs -1 )))
262
- (pop-to-buffer
263
- debugger-buffer
264
- `((display-buffer-reuse-window
265
- display-buffer-in-previous-window
266
- display-buffer-below-selected)
267
- . ((window-min-height . 10 )
268
- (window-height . fit-window-to-buffer)
269
- ,@(when (and (window-live-p debugger-previous-window)
270
- (frame-visible-p
271
- (window-frame debugger-previous-window)))
272
- `((previous-window . , debugger-previous-window ))))))
273
- (setq debugger-window (selected-window ))
274
- (if (eq debugger-previous-window debugger-window)
275
- (when debugger-jumping-flag
276
- ; ; Try to restore previous height of debugger
277
- ; ; window.
278
- (condition-case nil
279
- (window-resize
280
- debugger-window
281
- (- debugger-previous-window-height
282
- (window-total-height debugger-window)))
283
- (error nil )))
284
- (setq debugger-previous-window debugger-window))
285
- (message " " )
286
- (let ((standard-output nil )
287
- (buffer-read-only t ))
288
- (message " " )
289
- ; ; Make sure we unbind buffer-read-only in the right buffer.
290
- (save-excursion
291
- (recursive-edit ))))
292
- (when (and (window-live-p debugger-window)
293
- (eq (window-buffer debugger-window) debugger-buffer))
294
- ; ; Record height of debugger window.
295
- (setq debugger-previous-window-height
296
- (window-total-height debugger-window)))
297
- (if debugger-will-be-back
298
- ; ; Restore previous window configuration (Bug#12623).
299
- (set-window-configuration window-configuration)
171
+ (if inhibit-redisplay
172
+ ; ; Don't really try to enter debugger within an eval from redisplay.
173
+ debugger-value
174
+ (let ((non-interactive-frame
175
+ (or noninteractive ; FIXME: Presumably redundant.
176
+ ; ; If we're in the initial-frame (where `message' just
177
+ ; ; outputs to stdout) so there's no tty or GUI frame to
178
+ ; ; display the backtrace and interact with it: just dump a
179
+ ; ; backtrace to stdout. This happens for example while
180
+ ; ; handling an error in code from early-init.el with
181
+ ; ; --debug-init.
182
+ (and (eq t (framep (selected-frame )))
183
+ (equal " initial_terminal" (terminal-name )))))
184
+ ; ; Don't let `inhibit-message' get in our way (especially important if
185
+ ; ; `non-interactive-frame' evaluated to a non-nil value.
186
+ (inhibit-message nil ))
187
+ (unless non-interactive-frame
188
+ (message " Entering debugger... " ))
189
+ (let (debugger-value
190
+ (debugger-previous-state
191
+ (if (get-buffer " *Backtrace*" )
192
+ (with-current-buffer (get-buffer " *Backtrace*" )
193
+ (debugger--save-buffer-state))))
194
+ (debugger-args args)
195
+ (debugger-buffer (get-buffer-create " *Backtrace*" ))
196
+ (debugger-old-buffer (current-buffer ))
197
+ (debugger-window nil )
198
+ (debugger-step-after-exit nil )
199
+ (debugger-will-be-back nil )
200
+ ; ; Don't keep reading from an executing kbd macro!
201
+ (executing-kbd-macro nil )
202
+ ; ; Save the outer values of these vars for the `e' command
203
+ ; ; before we replace the values.
204
+ (debugger-outer-match-data (match-data ))
205
+ (debugger-with-timeout-suspend (with-timeout-suspend )))
206
+ ; ; Set this instead of binding it, so that `q'
207
+ ; ; will not restore it.
208
+ (setq overriding-terminal-local-map nil )
209
+ ; ; Don't let these magic variables affect the debugger itself.
210
+ (let ((last-command nil ) this-command track-mouse
211
+ (inhibit-trace t )
212
+ unread-command-events
213
+ unread-post-input-method-events
214
+ last-input-event last-command-event last-nonmenu-event
215
+ last-event-frame
216
+ overriding-local-map
217
+ load-read-function
218
+ ; ; If we are inside a minibuffer, allow nesting
219
+ ; ; so that we don't get an error from the `e' command.
220
+ (enable-recursive-minibuffers
221
+ (or enable-recursive-minibuffers (> (minibuffer-depth ) 0 )))
222
+ (standard-input t ) (standard-output t )
223
+ inhibit-redisplay
224
+ (cursor-in-echo-area nil )
225
+ (window-configuration (current-window-configuration )))
226
+ (unwind-protect
227
+ (save-excursion
228
+ (when (eq (car debugger-args) 'debug )
229
+ ; ; Skip the frames for backtrace-debug, byte-code,
230
+ ; ; debug--implement-debug-on-entry and the advice's `apply' .
231
+ (backtrace-debug 4 t )
232
+ ; ; Place an extra debug-on-exit for macro's.
233
+ (when (eq 'lambda (car-safe (cadr (backtrace-frame 4 ))))
234
+ (backtrace-debug 5 t )))
235
+ (with-current-buffer debugger-buffer
236
+ (unless (derived-mode-p 'debugger-mode )
237
+ (debugger-mode ))
238
+ (debugger-setup-buffer debugger-args)
239
+ (when non-interactive-frame
240
+ ; ; If the backtrace is long, save the beginning
241
+ ; ; and the end, but discard the middle.
242
+ (let ((inhibit-read-only t ))
243
+ (when (> (count-lines (point-min ) (point-max ))
244
+ debugger-batch-max-lines)
245
+ (goto-char (point-min ))
246
+ (forward-line (/ debugger-batch-max-lines 2 ))
247
+ (let ((middlestart (point )))
248
+ (goto-char (point-max ))
249
+ (forward-line (- (/ debugger-batch-max-lines 2 )))
250
+ (delete-region middlestart (point )))
251
+ (insert " ...\n " )))
252
+ (message " %s " (buffer-string ))
253
+ (kill-emacs -1 )))
254
+ (pop-to-buffer
255
+ debugger-buffer
256
+ `((display-buffer-reuse-window
257
+ display-buffer-in-previous-window
258
+ display-buffer-below-selected)
259
+ . ((window-min-height . 10 )
260
+ (window-height . fit-window-to-buffer)
261
+ ,@(when (and (window-live-p debugger-previous-window)
262
+ (frame-visible-p
263
+ (window-frame debugger-previous-window)))
264
+ `((previous-window . , debugger-previous-window ))))))
265
+ (setq debugger-window (selected-window ))
266
+ (if (eq debugger-previous-window debugger-window)
267
+ (when debugger-jumping-flag
268
+ ; ; Try to restore previous height of debugger
269
+ ; ; window.
270
+ (condition-case nil
271
+ (window-resize
272
+ debugger-window
273
+ (- debugger-previous-window-height
274
+ (window-total-height debugger-window)))
275
+ (error nil )))
276
+ (setq debugger-previous-window debugger-window))
277
+ (message " " )
278
+ (let ((standard-output nil )
279
+ (buffer-read-only t ))
280
+ (message " " )
281
+ ; ; Make sure we unbind buffer-read-only in the right buffer.
282
+ (save-excursion
283
+ (recursive-edit ))))
300
284
(when (and (window-live-p debugger-window)
301
285
(eq (window-buffer debugger-window) debugger-buffer))
302
- (progn
303
- ; ; Unshow debugger-buffer.
304
- (quit-restore-window debugger-window debugger-bury-or-kill)
305
- ; ; Restore current buffer (Bug#12502).
306
- (set-buffer debugger-old-buffer)))
307
- ; ; Forget debugger window, it won't be back (Bug#17882).
308
- (setq debugger-previous-window nil ))
309
- ; ; Restore previous state of debugger-buffer in case we were
310
- ; ; in a recursive invocation of the debugger, otherwise just
311
- ; ; erase the buffer.
312
- (when (buffer-live-p debugger-buffer)
313
- (with-current-buffer debugger-buffer
314
- (if debugger-previous-state
315
- (debugger--restore-buffer-state debugger-previous-state)
316
- (setq backtrace-insert-header-function nil )
317
- (setq backtrace-frames nil )
318
- (backtrace-print))))
319
- (with-timeout-unsuspend debugger-with-timeout-suspend)
320
- (set-match-data debugger-outer-match-data)))
321
- (setq debug-on-next-call debugger-step-after-exit)
322
- debugger-value))))
286
+ ; ; Record height of debugger window.
287
+ (setq debugger-previous-window-height
288
+ (window-total-height debugger-window)))
289
+ (if debugger-will-be-back
290
+ ; ; Restore previous window configuration (Bug#12623).
291
+ (set-window-configuration window-configuration)
292
+ (when (and (window-live-p debugger-window)
293
+ (eq (window-buffer debugger-window) debugger-buffer))
294
+ (progn
295
+ ; ; Unshow debugger-buffer.
296
+ (quit-restore-window debugger-window debugger-bury-or-kill)
297
+ ; ; Restore current buffer (Bug#12502).
298
+ (set-buffer debugger-old-buffer)))
299
+ ; ; Forget debugger window, it won't be back (Bug#17882).
300
+ (setq debugger-previous-window nil ))
301
+ ; ; Restore previous state of debugger-buffer in case we were
302
+ ; ; in a recursive invocation of the debugger, otherwise just
303
+ ; ; erase the buffer.
304
+ (when (buffer-live-p debugger-buffer)
305
+ (with-current-buffer debugger-buffer
306
+ (if debugger-previous-state
307
+ (debugger--restore-buffer-state debugger-previous-state)
308
+ (setq backtrace-insert-header-function nil )
309
+ (setq backtrace-frames nil )
310
+ (backtrace-print))))
311
+ (with-timeout-unsuspend debugger-with-timeout-suspend)
312
+ (set-match-data debugger-outer-match-data)))
313
+ (setq debug-on-next-call debugger-step-after-exit)
314
+ debugger-value))))
323
315
324
316
(defun debugger--print (obj &optional stream )
325
317
(condition-case err
0 commit comments