aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1994-01-09 23:11:56 +0000
committerRichard M. Stallman1994-01-09 23:11:56 +0000
commit35cf010db626c602e1a7ee63659f7bbdc930c029 (patch)
treefa817275702ac7ac6c6a4d57254556405187f0a7
parentb062d1fe4413a3d399f0da62b815217f8bd33e2c (diff)
downloademacs-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.el182
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