88 |
(defvar debugger-outer-standard-output) |
(defvar debugger-outer-standard-output) |
89 |
(defvar debugger-outer-inhibit-redisplay) |
(defvar debugger-outer-inhibit-redisplay) |
90 |
(defvar debugger-outer-cursor-in-echo-area) |
(defvar debugger-outer-cursor-in-echo-area) |
91 |
|
(defvar debugger-will-be-back nil |
92 |
|
"Non-nil if we expect to get back in the debugger soon.") |
93 |
|
|
94 |
(defvar inhibit-debug-on-entry nil |
(defvar inhibit-debug-on-entry nil |
95 |
"Non-nil means that debug-on-entry is disabled.") |
"Non-nil means that debug-on-entry is disabled.") |
125 |
(get-buffer-create "*Backtrace*"))) |
(get-buffer-create "*Backtrace*"))) |
126 |
(debugger-old-buffer (current-buffer)) |
(debugger-old-buffer (current-buffer)) |
127 |
(debugger-step-after-exit nil) |
(debugger-step-after-exit nil) |
128 |
|
(debugger-will-be-back nil) |
129 |
;; Don't keep reading from an executing kbd macro! |
;; Don't keep reading from an executing kbd macro! |
130 |
(executing-kbd-macro nil) |
(executing-kbd-macro nil) |
131 |
;; Save the outer values of these vars for the `e' command |
;; Save the outer values of these vars for the `e' command |
221 |
(fundamental-mode) |
(fundamental-mode) |
222 |
(with-selected-window (get-buffer-window debugger-buffer 0) |
(with-selected-window (get-buffer-window debugger-buffer 0) |
223 |
(when (and (window-dedicated-p (selected-window)) |
(when (and (window-dedicated-p (selected-window)) |
224 |
(not debugger-step-after-exit)) |
(not debugger-will-be-back)) |
225 |
;; If the window is not dedicated, burying the buffer |
;; If the window is not dedicated, burying the buffer |
226 |
;; will mean that the frame created for it is left |
;; will mean that the frame created for it is left |
227 |
;; around showing some random buffer, and next time we |
;; around showing some random buffer, and next time we |
228 |
;; pop to the debugger buffer we'll create yet |
;; pop to the debugger buffer we'll create yet |
229 |
;; another frame. |
;; another frame. |
230 |
;; If debugger-step-after-exit is non-nil, the frame |
;; If debugger-will-be-back is non-nil, the frame |
231 |
;; would need to be de-iconified anyway immediately |
;; would need to be de-iconified anyway immediately |
232 |
;; after when we re-enter the debugger, so iconifying it |
;; after when we re-enter the debugger, so iconifying it |
233 |
;; here would cause flashing. |
;; here would cause flashing. |
323 |
(save-excursion |
(save-excursion |
324 |
(set-buffer (or buffer (current-buffer))) |
(set-buffer (or buffer (current-buffer))) |
325 |
(setq buffer (current-buffer)) |
(setq buffer (current-buffer)) |
326 |
(let ((buffer-read-only nil) |
(let ((inhibit-read-only t) |
327 |
(old-end (point-min)) (new-end (point-min))) |
(old-end (point-min)) (new-end (point-min))) |
328 |
;; If we saved an old backtrace, find the common part |
;; If we saved an old backtrace, find the common part |
329 |
;; between the new and the old. |
;; between the new and the old. |
393 |
(interactive) |
(interactive) |
394 |
(setq debugger-step-after-exit t) |
(setq debugger-step-after-exit t) |
395 |
(setq debugger-jumping-flag t) |
(setq debugger-jumping-flag t) |
396 |
|
(setq debugger-will-be-back t) |
397 |
(add-hook 'post-command-hook 'debugger-reenable) |
(add-hook 'post-command-hook 'debugger-reenable) |
398 |
(message "Proceeding, will debug on next eval or call.") |
(message "Proceeding, will debug on next eval or call.") |
399 |
(exit-recursive-edit)) |
(exit-recursive-edit)) |
404 |
(unless debugger-may-continue |
(unless debugger-may-continue |
405 |
(error "Cannot continue")) |
(error "Cannot continue")) |
406 |
(message "Continuing.") |
(message "Continuing.") |
407 |
|
(save-excursion |
408 |
|
;; Check to see if we've flagged some frame for debug-on-exit, in which |
409 |
|
;; case we'll probably come back to the debugger soon. |
410 |
|
(goto-char (point-min)) |
411 |
|
(if (re-search-forward "^\\* " nil t) |
412 |
|
(setq debugger-will-be-back t))) |
413 |
(exit-recursive-edit)) |
(exit-recursive-edit)) |
414 |
|
|
415 |
(defun debugger-return-value (val) |
(defun debugger-return-value (val) |
420 |
(setq debugger-value val) |
(setq debugger-value val) |
421 |
(princ "Returning " t) |
(princ "Returning " t) |
422 |
(prin1 debugger-value) |
(prin1 debugger-value) |
423 |
|
(save-excursion |
424 |
|
;; Check to see if we've flagged some frame for debug-on-exit, in which |
425 |
|
;; case we'll probably come back to the debugger soon. |
426 |
|
(goto-char (point-min)) |
427 |
|
(if (re-search-forward "^\\* " nil t) |
428 |
|
(setq debugger-will-be-back t))) |
429 |
(exit-recursive-edit)) |
(exit-recursive-edit)) |
430 |
|
|
431 |
(defun debugger-jump () |
(defun debugger-jump () |
435 |
(setq debugger-jumping-flag t) |
(setq debugger-jumping-flag t) |
436 |
(add-hook 'post-command-hook 'debugger-reenable) |
(add-hook 'post-command-hook 'debugger-reenable) |
437 |
(message "Continuing through this frame") |
(message "Continuing through this frame") |
438 |
|
(setq debugger-will-be-back t) |
439 |
(exit-recursive-edit)) |
(exit-recursive-edit)) |
440 |
|
|
441 |
(defun debugger-reenable () |
(defun debugger-reenable () |
484 |
(beginning-of-line) |
(beginning-of-line) |
485 |
(backtrace-debug (debugger-frame-number) t) |
(backtrace-debug (debugger-frame-number) t) |
486 |
(if (= (following-char) ? ) |
(if (= (following-char) ? ) |
487 |
(let ((buffer-read-only nil)) |
(let ((inhibit-read-only t)) |
488 |
(delete-char 1) |
(delete-char 1) |
489 |
(insert ?*))) |
(insert ?*))) |
490 |
(beginning-of-line)) |
(beginning-of-line)) |
500 |
(beginning-of-line) |
(beginning-of-line) |
501 |
(backtrace-debug (debugger-frame-number) nil) |
(backtrace-debug (debugger-frame-number) nil) |
502 |
(if (= (following-char) ?*) |
(if (= (following-char) ?*) |
503 |
(let ((buffer-read-only nil)) |
(let ((inhibit-read-only t)) |
504 |
(delete-char 1) |
(delete-char 1) |
505 |
(insert ? ))) |
(insert ? ))) |
506 |
(beginning-of-line)) |
(beginning-of-line)) |