aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Heuer1997-12-04 04:42:31 +0000
committerKarl Heuer1997-12-04 04:42:31 +0000
commit8c1cd093df5cfa60b3941f869bae60e94936e1d7 (patch)
tree4c1e9b08be43ac82f0750401232446e87edc3594
parent83afd62c8723f5197b0485f431b742b3b03d00ea (diff)
downloademacs-8c1cd093df5cfa60b3941f869bae60e94936e1d7.tar.gz
emacs-8c1cd093df5cfa60b3941f869bae60e94936e1d7.zip
(debugger-mode-hook): New user variable.
(debugger-env-macro): New general purpose macro for all debugger functions; separated from `debugger-eval-expression'. (debugger-eval-expression): Use `debugger-env-macro'. (debugger-record-buffer): New variable. (debugger-record-expression): New user function , key "R". (debugger-mode): Now runs hook `debugger-mode-hook'.
-rw-r--r--lisp/emacs-lisp/debug.el126
1 files changed, 83 insertions, 43 deletions
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index 9d46bda6869..f7b8e31b714 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -28,6 +28,10 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(defvar debugger-mode-hook nil
32 "*Hooks run when `debugger-mode' is turned on.")
33
34
31(defvar debug-function-list nil 35(defvar debug-function-list nil
32 "List of functions currently set for debug on entry.") 36 "List of functions currently set for debug on entry.")
33 37
@@ -315,52 +319,61 @@ Applies to the frame whose line point is on in the backtrace."
315 (insert ? ))) 319 (insert ? )))
316 (beginning-of-line)) 320 (beginning-of-line))
317 321
322
323
324(put 'debugger-env-macro 'lisp-indent-function 0)
325(defmacro debugger-env-macro (&rest body)
326 "Run BODY in original environment."
327 (`
328 (save-excursion
329 (if (null (buffer-name debugger-old-buffer))
330 ;; old buffer deleted
331 (setq debugger-old-buffer (current-buffer)))
332 (set-buffer debugger-old-buffer)
333 (let ((track-mouse debugger-outer-track-mouse)
334 (last-command debugger-outer-last-command)
335 (this-command debugger-outer-this-command)
336 (unread-command-char debugger-outer-unread-command-char)
337 (unread-command-events debugger-outer-unread-command-events)
338 (last-input-event debugger-outer-last-input-event)
339 (last-command-event debugger-outer-last-command-event)
340 (last-nonmenu-event debugger-outer-last-nonmenu-event)
341 (last-event-frame debugger-outer-last-event-frame)
342 (standard-input debugger-outer-standard-input)
343 (standard-output debugger-outer-standard-output)
344 (cursor-in-echo-area debugger-outer-cursor-in-echo-area)
345 (overriding-local-map debugger-outer-overriding-local-map)
346 (overriding-terminal-local-map
347 debugger-outer-overriding-terminal-local-map)
348 (load-read-function debugger-outer-load-read-function))
349 (store-match-data debugger-outer-match-data)
350 (prog1 (progn (,@ body))
351 (setq debugger-outer-match-data (match-data))
352 (setq debugger-outer-load-read-function load-read-function)
353 (setq debugger-outer-overriding-terminal-local-map
354 overriding-terminal-local-map)
355 (setq debugger-outer-overriding-local-map overriding-local-map)
356 (setq debugger-outer-track-mouse track-mouse)
357 (setq debugger-outer-last-command last-command)
358 (setq debugger-outer-this-command this-command)
359 (setq debugger-outer-unread-command-char unread-command-char)
360 (setq debugger-outer-unread-command-events unread-command-events)
361 (setq debugger-outer-last-input-event last-input-event)
362 (setq debugger-outer-last-command-event last-command-event)
363 (setq debugger-outer-last-nonmenu-event last-nonmenu-event)
364 (setq debugger-outer-last-event-frame last-event-frame)
365 (setq debugger-outer-standard-input standard-input)
366 (setq debugger-outer-standard-output standard-output)
367 (setq debugger-outer-cursor-in-echo-area cursor-in-echo-area)
368 )))))
369
318(defun debugger-eval-expression (exp) 370(defun debugger-eval-expression (exp)
319 "Eval an expression, in an environment like that outside the debugger." 371 "Eval an expression, in an environment like that outside the debugger."
320 (interactive 372 (interactive
321 (list (read-from-minibuffer "Eval: " 373 (list (read-from-minibuffer "Eval: "
322 nil read-expression-map t 374 nil read-expression-map t
323 'read-expression-history))) 375 'read-expression-history)))
324 (save-excursion 376 (debugger-env-macro (eval-expression exp)))
325 (if (null (buffer-name debugger-old-buffer))
326 ;; old buffer deleted
327 (setq debugger-old-buffer (current-buffer)))
328 (set-buffer debugger-old-buffer)
329 (let ((track-mouse debugger-outer-track-mouse)
330 (last-command debugger-outer-last-command)
331 (this-command debugger-outer-this-command)
332 (unread-command-char debugger-outer-unread-command-char)
333 (unread-command-events debugger-outer-unread-command-events)
334 (last-input-event debugger-outer-last-input-event)
335 (last-command-event debugger-outer-last-command-event)
336 (last-nonmenu-event debugger-outer-last-nonmenu-event)
337 (last-event-frame debugger-outer-last-event-frame)
338 (standard-input debugger-outer-standard-input)
339 (standard-output debugger-outer-standard-output)
340 (cursor-in-echo-area debugger-outer-cursor-in-echo-area)
341 (overriding-local-map debugger-outer-overriding-local-map)
342 (overriding-terminal-local-map
343 debugger-outer-overriding-terminal-local-map)
344 (load-read-function debugger-outer-load-read-function))
345 (store-match-data debugger-outer-match-data)
346 (prog1 (eval-expression exp)
347 (setq debugger-outer-match-data (match-data))
348 (setq debugger-outer-load-read-function load-read-function)
349 (setq debugger-outer-overriding-local-map overriding-local-map)
350 (setq debugger-outer-overriding-terminal-local-map
351 overriding-terminal-local-map)
352 (setq debugger-outer-track-mouse track-mouse)
353 (setq debugger-outer-last-command last-command)
354 (setq debugger-outer-this-command this-command)
355 (setq debugger-outer-unread-command-char unread-command-char)
356 (setq debugger-outer-unread-command-events unread-command-events)
357 (setq debugger-outer-last-input-event last-input-event)
358 (setq debugger-outer-last-command-event last-command-event)
359 (setq debugger-outer-last-nonmenu-event last-nonmenu-event)
360 (setq debugger-outer-last-event-frame last-event-frame)
361 (setq debugger-outer-standard-input standard-input)
362 (setq debugger-outer-standard-output standard-output)
363 (setq debugger-outer-cursor-in-echo-area cursor-in-echo-area)))))
364 377
365(defvar debugger-mode-map nil) 378(defvar debugger-mode-map nil)
366(if debugger-mode-map 379(if debugger-mode-map
@@ -379,7 +392,33 @@ Applies to the frame whose line point is on in the backtrace."
379 (define-key debugger-mode-map "h" 'describe-mode) 392 (define-key debugger-mode-map "h" 'describe-mode)
380 (define-key debugger-mode-map "q" 'top-level) 393 (define-key debugger-mode-map "q" 'top-level)
381 (define-key debugger-mode-map "e" 'debugger-eval-expression) 394 (define-key debugger-mode-map "e" 'debugger-eval-expression)
382 (define-key debugger-mode-map " " 'next-line))) 395 (define-key debugger-mode-map " " 'next-line)
396 (define-key debugger-mode-map "R" 'debugger-record-expression)
397 ))
398
399
400(defvar debugger-record-buffer "*Debugger-record*"
401 "*Buffer name for expression values, for \\[debugger-record-expression].")
402
403(defun debugger-record-expression (exp)
404 "Display a variable's value and record it in `*Backtrace-record*' buffer."
405 (interactive
406 (list (read-from-minibuffer
407 "Record Eval: "
408 nil
409 read-expression-map t
410 'read-expression-history)))
411 (let* ((buffer (get-buffer-create debugger-record-buffer))
412 (standard-output buffer))
413 (princ (format "Debugger Eval (%s): " exp))
414 (princ (debugger-eval-expression exp))
415 (terpri))
416
417 (with-current-buffer (get-buffer debugger-record-buffer)
418 (save-excursion
419 (forward-line -1)
420 (message
421 (buffer-substring (point) (progn (end-of-line) (point)))))))
383 422
384(put 'debugger-mode 'mode-class 'special) 423(put 'debugger-mode 'mode-class 'special)
385 424
@@ -398,14 +437,15 @@ which functions will enter the debugger when called.
398 437
399Complete list of commands: 438Complete list of commands:
400\\{debugger-mode-map}" 439\\{debugger-mode-map}"
401 (kill-all-local-variables) 440 (kill-all-local-variables)
402 (setq major-mode 'debugger-mode) 441 (setq major-mode 'debugger-mode)
403 (setq mode-name "Debugger") 442 (setq mode-name "Debugger")
404 (setq truncate-lines t) 443 (setq truncate-lines t)
405 (set-syntax-table emacs-lisp-mode-syntax-table) 444 (set-syntax-table emacs-lisp-mode-syntax-table)
406 ;; Since we must handle bytecode... 445 ;; Since we must handle bytecode...
407 (setq enable-multibyte-characters nil) 446 (setq enable-multibyte-characters nil)
408 (use-local-map debugger-mode-map)) 447 (use-local-map debugger-mode-map)
448 (run-hooks 'debugger-mode-hook))
409 449
410;;;###autoload 450;;;###autoload
411(defun debug-on-entry (function) 451(defun debug-on-entry (function)