diff options
| author | Richard M. Stallman | 1994-01-09 23:11:56 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-01-09 23:11:56 +0000 |
| commit | 35cf010db626c602e1a7ee63659f7bbdc930c029 (patch) | |
| tree | fa817275702ac7ac6c6a4d57254556405187f0a7 | |
| parent | b062d1fe4413a3d399f0da62b815217f8bd33e2c (diff) | |
| download | emacs-35cf010db626c602e1a7ee63659f7bbdc930c029.tar.gz emacs-35cf010db626c602e1a7ee63659f7bbdc930c029.zip | |
(debug): Bind a bunch of vars, like last-command, to
neutral values. Save the outer values in debugger-last-command, etc.
Put those saved values back into effect when returning.
(debugger-eval-expression): Put the saved values into effect
while evaluating, and store modified values back into
debugger-outer-... after evaluating.
| -rw-r--r-- | lisp/emacs-lisp/debug.el | 182 |
1 files changed, 126 insertions, 56 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el index 9a98e47766f..717b1aceb83 100644 --- a/lisp/emacs-lisp/debug.el +++ b/lisp/emacs-lisp/debug.el | |||
| @@ -30,6 +30,19 @@ | |||
| 30 | (defvar debug-function-list nil | 30 | (defvar debug-function-list nil |
| 31 | "List of functions currently set for debug on entry.") | 31 | "List of functions currently set for debug on entry.") |
| 32 | 32 | ||
| 33 | (defvar debugger-outer-track-mouse) | ||
| 34 | (defvar debugger-outer-last-command) | ||
| 35 | (defvar debugger-outer-this-command) | ||
| 36 | (defvar debugger-outer-unread-command-char) | ||
| 37 | (defvar debugger-outer-unread-command-events) | ||
| 38 | (defvar debugger-outer-last-input-event) | ||
| 39 | (defvar debugger-outer-last-command-event) | ||
| 40 | (defvar debugger-outer-last-nonmenu-event) | ||
| 41 | (defvar debugger-outer-last-event-frame) | ||
| 42 | (defvar debugger-outer-standard-input) | ||
| 43 | (defvar debugger-outer-standard-output) | ||
| 44 | (defvar debugger-outer-cursor-in-echo-area) | ||
| 45 | |||
| 33 | ;;;###autoload | 46 | ;;;###autoload |
| 34 | (setq debugger 'debug) | 47 | (setq debugger 'debug) |
| 35 | ;;;###autoload | 48 | ;;;###autoload |
| @@ -52,62 +65,95 @@ first will be printed into the backtrace buffer." | |||
| 52 | (debugger-step-after-exit nil) | 65 | (debugger-step-after-exit nil) |
| 53 | ;; Don't keep reading from an executing kbd macro! | 66 | ;; Don't keep reading from an executing kbd macro! |
| 54 | (executing-macro nil) | 67 | (executing-macro nil) |
| 55 | last-command this command | 68 | ;; Save the outer values of these vars for the `e' command |
| 56 | (cursor-in-echo-area nil)) | 69 | ;; before we replace the values. |
| 57 | (unwind-protect | 70 | (debugger-outer-track-mouse track-mouse) |
| 58 | (save-excursion | 71 | (debugger-outer-last-command last-command) |
| 59 | (save-window-excursion | 72 | (debugger-outer-this-command this-command) |
| 60 | (pop-to-buffer debugger-buffer) | 73 | (debugger-outer-unread-command-char unread-command-char) |
| 61 | (erase-buffer) | 74 | (debugger-outer-unread-command-events unread-command-events) |
| 62 | (let ((standard-output (current-buffer)) | 75 | (debugger-outer-last-input-event last-input-event) |
| 63 | (print-escape-newlines t) | 76 | (debugger-outer-last-command-event last-command-event) |
| 64 | (print-length 50)) | 77 | (debugger-outer-last-nonmenu-event last-nonmenu-event) |
| 65 | (backtrace)) | 78 | (debugger-outer-last-event-frame last-event-frame) |
| 66 | (goto-char (point-min)) | 79 | (debugger-outer-standard-input standard-input) |
| 67 | (debugger-mode) | 80 | (debugger-outer-standard-output standard-output) |
| 68 | (delete-region (point) | 81 | (debugger-outer-cursor-in-echo-area cursor-in-echo-area)) |
| 69 | (progn | 82 | ;; Don't let these magic variables affect the debugger itself. |
| 70 | (search-forward "\n debug(") | 83 | (let ((last-command nil) this-command track-mouse |
| 71 | (forward-line 1) | 84 | unread-command-char unread-command-events |
| 72 | (point))) | 85 | last-input-event last-command-event last-nonmenu-event |
| 73 | (debugger-reenable) | 86 | last-event-frame |
| 74 | (cond ((memq (car debugger-args) '(lambda debug)) | 87 | (standard-input t) (standard-output t) |
| 75 | (insert "Entering:\n") | 88 | (cursor-in-echo-area nil)) |
| 76 | (if (eq (car debugger-args) 'debug) | 89 | (unwind-protect |
| 77 | (progn | 90 | (save-excursion |
| 78 | (backtrace-debug 4 t) | 91 | (save-window-excursion |
| 79 | (delete-char 1) | 92 | (pop-to-buffer debugger-buffer) |
| 80 | (insert ?*) | 93 | (erase-buffer) |
| 81 | (beginning-of-line)))) | 94 | (let ((standard-output (current-buffer)) |
| 82 | ((eq (car debugger-args) 'exit) | 95 | (print-escape-newlines t) |
| 83 | (insert "Return value: ") | 96 | (print-length 50)) |
| 84 | (setq debugger-value (nth 1 debugger-args)) | 97 | (backtrace)) |
| 85 | (prin1 debugger-value (current-buffer)) | 98 | (goto-char (point-min)) |
| 86 | (insert ?\n) | 99 | (debugger-mode) |
| 87 | (delete-char 1) | 100 | (delete-region (point) |
| 88 | (insert ? ) | 101 | (progn |
| 89 | (beginning-of-line)) | 102 | (search-forward "\n debug(") |
| 90 | ((eq (car debugger-args) 'error) | 103 | (forward-line 1) |
| 91 | (insert "Signalling: ") | 104 | (point))) |
| 92 | (prin1 (nth 1 debugger-args) (current-buffer)) | 105 | (debugger-reenable) |
| 93 | (insert ?\n)) | 106 | (cond ((memq (car debugger-args) '(lambda debug)) |
| 94 | ((eq (car debugger-args) t) | 107 | (insert "Entering:\n") |
| 95 | (insert "Beginning evaluation of function call form:\n")) | 108 | (if (eq (car debugger-args) 'debug) |
| 96 | (t | 109 | (progn |
| 97 | (prin1 (if (eq (car debugger-args) 'nil) | 110 | (backtrace-debug 4 t) |
| 98 | (cdr debugger-args) debugger-args) | 111 | (delete-char 1) |
| 99 | (current-buffer)) | 112 | (insert ?*) |
| 100 | (insert ?\n))) | 113 | (beginning-of-line)))) |
| 101 | (message "") | 114 | ((eq (car debugger-args) 'exit) |
| 102 | (let ((inhibit-trace t) | 115 | (insert "Return value: ") |
| 103 | (standard-output nil) | 116 | (setq debugger-value (nth 1 debugger-args)) |
| 104 | (buffer-read-only t)) | 117 | (prin1 debugger-value (current-buffer)) |
| 118 | (insert ?\n) | ||
| 119 | (delete-char 1) | ||
| 120 | (insert ? ) | ||
| 121 | (beginning-of-line)) | ||
| 122 | ((eq (car debugger-args) 'error) | ||
| 123 | (insert "Signalling: ") | ||
| 124 | (prin1 (nth 1 debugger-args) (current-buffer)) | ||
| 125 | (insert ?\n)) | ||
| 126 | ((eq (car debugger-args) t) | ||
| 127 | (insert "Beginning evaluation of function call form:\n")) | ||
| 128 | (t | ||
| 129 | (prin1 (if (eq (car debugger-args) 'nil) | ||
| 130 | (cdr debugger-args) debugger-args) | ||
| 131 | (current-buffer)) | ||
| 132 | (insert ?\n))) | ||
| 105 | (message "") | 133 | (message "") |
| 106 | (recursive-edit)))) | 134 | (let ((inhibit-trace t) |
| 107 | ;; So that users do not try to execute debugger commands | 135 | (standard-output nil) |
| 108 | ;; in an invalid context | 136 | (buffer-read-only t)) |
| 109 | (kill-buffer debugger-buffer) | 137 | (message "") |
| 110 | (store-match-data debugger-match-data)) | 138 | (recursive-edit)))) |
| 139 | ;; So that users do not try to execute debugger commands | ||
| 140 | ;; in an invalid context | ||
| 141 | (kill-buffer debugger-buffer) | ||
| 142 | (store-match-data debugger-match-data))) | ||
| 143 | ;; Put into effect the modified values of these variables | ||
| 144 | ;; in case the user set them with the `e' command. | ||
| 145 | (setq track-mouse debugger-outer-track-mouse) | ||
| 146 | (setq last-command debugger-outer-last-command) | ||
| 147 | (setq this-command debugger-outer-this-command) | ||
| 148 | (setq unread-command-char debugger-outer-unread-command-char) | ||
| 149 | (setq unread-command-events debugger-outer-unread-command-events) | ||
| 150 | (setq last-input-event debugger-outer-last-input-event) | ||
| 151 | (setq last-command-event debugger-outer-last-command-event) | ||
| 152 | (setq last-nonmenu-event debugger-outer-last-nonmenu-event) | ||
| 153 | (setq last-event-frame debugger-outer-last-event-frame) | ||
| 154 | (setq standard-input debugger-outer-standard-input) | ||
| 155 | (setq standard-output debugger-outer-standard-output) | ||
| 156 | (setq cursor-in-echo-area debugger-outer-cursor-in-echo-area)) | ||
| 111 | (setq debug-on-next-call debugger-step-after-exit) | 157 | (setq debug-on-next-call debugger-step-after-exit) |
| 112 | debugger-value)) | 158 | debugger-value)) |
| 113 | 159 | ||
| @@ -226,7 +272,31 @@ Applies to the frame whose line point is on in the backtrace." | |||
| 226 | ;; old buffer deleted | 272 | ;; old buffer deleted |
| 227 | (setq debugger-old-buffer (current-buffer))) | 273 | (setq debugger-old-buffer (current-buffer))) |
| 228 | (set-buffer debugger-old-buffer) | 274 | (set-buffer debugger-old-buffer) |
| 229 | (eval-expression exp))) | 275 | (let ((track-mouse debugger-outer-track-mouse) |
| 276 | (last-command debugger-outer-last-command) | ||
| 277 | (this-command debugger-outer-this-command) | ||
| 278 | (unread-command-char debugger-outer-unread-command-char) | ||
| 279 | (unread-command-events debugger-outer-unread-command-events) | ||
| 280 | (last-input-event debugger-outer-last-input-event) | ||
| 281 | (last-command-event debugger-outer-last-command-event) | ||
| 282 | (last-nonmenu-event debugger-outer-last-nonmenu-event) | ||
| 283 | (last-event-frame debugger-outer-last-event-frame) | ||
| 284 | (standard-input debugger-outer-standard-input) | ||
| 285 | (standard-output debugger-outer-standard-output) | ||
| 286 | (cursor-in-echo-area debugger-outer-cursor-in-echo-area)) | ||
| 287 | (prog1 (eval-expression exp) | ||
| 288 | (setq debugger-outer-track-mouse track-mouse) | ||
| 289 | (setq debugger-outer-last-command last-command) | ||
| 290 | (setq debugger-outer-this-command this-command) | ||
| 291 | (setq debugger-outer-unread-command-char unread-command-char) | ||
| 292 | (setq debugger-outer-unread-command-events unread-command-events) | ||
| 293 | (setq debugger-outer-last-input-event last-input-event) | ||
| 294 | (setq debugger-outer-last-command-event last-command-event) | ||
| 295 | (setq debugger-outer-last-nonmenu-event last-nonmenu-event) | ||
| 296 | (setq debugger-outer-last-event-frame last-event-frame) | ||
| 297 | (setq debugger-outer-standard-input standard-input) | ||
| 298 | (setq debugger-outer-standard-output standard-output) | ||
| 299 | (setq debugger-outer-cursor-in-echo-area cursor-in-echo-area))))) | ||
| 230 | 300 | ||
| 231 | (defvar debugger-mode-map nil) | 301 | (defvar debugger-mode-map nil) |
| 232 | (if debugger-mode-map | 302 | (if debugger-mode-map |