comparison lisp/emacs-lisp/debug.el @ 90201:fbb2bea03df9

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-69 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 474-484) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 88-91) - Merge from emacs--cvs-trunk--0 - Update FSF's address in GPL notices - Update from CVS
author Miles Bader <miles@gnu.org>
date Thu, 14 Jul 2005 08:02:00 +0000
parents f9a65d7ebd29 193c8e4fb4d1
children 2d92f5c9d6ae
comparison
equal deleted inserted replaced
90200:f9a65d7ebd29 90201:fbb2bea03df9
148 (debugger-outer-last-nonmenu-event last-nonmenu-event) 148 (debugger-outer-last-nonmenu-event last-nonmenu-event)
149 (debugger-outer-last-event-frame last-event-frame) 149 (debugger-outer-last-event-frame last-event-frame)
150 (debugger-outer-standard-input standard-input) 150 (debugger-outer-standard-input standard-input)
151 (debugger-outer-standard-output standard-output) 151 (debugger-outer-standard-output standard-output)
152 (debugger-outer-inhibit-redisplay inhibit-redisplay) 152 (debugger-outer-inhibit-redisplay inhibit-redisplay)
153 (debugger-outer-cursor-in-echo-area cursor-in-echo-area)) 153 (debugger-outer-cursor-in-echo-area cursor-in-echo-area)
154 (debugger-with-timeout-suspend (with-timeout-suspend)))
154 ;; Set this instead of binding it, so that `q' 155 ;; Set this instead of binding it, so that `q'
155 ;; will not restore it. 156 ;; will not restore it.
156 (setq overriding-terminal-local-map nil) 157 (setq overriding-terminal-local-map nil)
157 ;; Don't let these magic variables affect the debugger itself. 158 ;; Don't let these magic variables affect the debugger itself.
158 (let ((last-command nil) this-command track-mouse 159 (let ((last-command nil) this-command track-mouse
233 ;; here would cause flashing. 234 ;; here would cause flashing.
234 ;; Use quit-window rather than bury-buffer to quieten 235 ;; Use quit-window rather than bury-buffer to quieten
235 ;; Drew Adams. --Stef 236 ;; Drew Adams. --Stef
236 (quit-window)))) 237 (quit-window))))
237 (kill-buffer debugger-buffer)) 238 (kill-buffer debugger-buffer))
239 (with-timeout-unsuspend debugger-with-timeout-suspend)
238 (set-match-data debugger-outer-match-data))) 240 (set-match-data debugger-outer-match-data)))
239 ;; Put into effect the modified values of these variables 241 ;; Put into effect the modified values of these variables
240 ;; in case the user set them with the `e' command. 242 ;; in case the user set them with the `e' command.
241 (setq load-read-function debugger-outer-load-read-function) 243 (setq load-read-function debugger-outer-load-read-function)
242 (setq overriding-local-map debugger-outer-overriding-local-map) 244 (setq overriding-local-map debugger-outer-overriding-local-map)
310 (current-buffer)) 312 (current-buffer))
311 (insert ?\n))) 313 (insert ?\n)))
312 ;; After any frame that uses eval-buffer, 314 ;; After any frame that uses eval-buffer,
313 ;; insert a line that states the buffer position it's reading at. 315 ;; insert a line that states the buffer position it's reading at.
314 (save-excursion 316 (save-excursion
315 (while (re-search-forward "^ eval-buffer(" nil t) 317 (let ((tem eval-buffer-list))
316 (end-of-line) 318 (while (and tem
317 (insert (format "\n ;;; Reading at buffer position %d" 319 (re-search-forward "^ eval-\\(buffer\\|region\\)(" nil t))
318 (with-current-buffer (nth 2 (backtrace-frame (debugger-frame-number))) 320 (end-of-line)
319 (point)))))) 321 (insert (format " ; Reading at buffer position %d"
322 ;; This will get the wrong result
323 ;; if there are two nested eval-region calls
324 ;; for the same buffer. That's not a very useful case.
325 (with-current-buffer (car tem)
326 (point))))
327 (pop tem))))
320 (debugger-make-xrefs)) 328 (debugger-make-xrefs))
321 329
322 (defun debugger-make-xrefs (&optional buffer) 330 (defun debugger-make-xrefs (&optional buffer)
323 "Attach cross-references to function names in the `*Backtrace*' buffer." 331 "Attach cross-references to function names in the `*Backtrace*' buffer."
324 (interactive "b") 332 (interactive "b")
589 (define-key map "h" 'describe-mode) 597 (define-key map "h" 'describe-mode)
590 (define-key map "q" 'top-level) 598 (define-key map "q" 'top-level)
591 (define-key map "e" 'debugger-eval-expression) 599 (define-key map "e" 'debugger-eval-expression)
592 (define-key map " " 'next-line) 600 (define-key map " " 'next-line)
593 (define-key map "R" 'debugger-record-expression) 601 (define-key map "R" 'debugger-record-expression)
594 (define-key map "\C-m" 'help-follow) 602 (define-key map "\C-m" 'debug-help-follow)
595 (define-key map [mouse-2] 'push-button) 603 (define-key map [mouse-2] 'push-button)
596 map)) 604 map))
597 605
606 (put 'debugger-mode 'mode-class 'special)
607
608 (defun debugger-mode ()
609 "Mode for backtrace buffers, selected in debugger.
610 \\<debugger-mode-map>
611 A line starts with `*' if exiting that frame will call the debugger.
612 Type \\[debugger-frame] or \\[debugger-frame-clear] to set or remove the `*'.
613
614 When in debugger due to frame being exited,
615 use the \\[debugger-return-value] command to override the value
616 being returned from that frame.
617
618 Use \\[debug-on-entry] and \\[cancel-debug-on-entry] to control
619 which functions will enter the debugger when called.
620
621 Complete list of commands:
622 \\{debugger-mode-map}"
623 (kill-all-local-variables)
624 (setq major-mode 'debugger-mode)
625 (setq mode-name "Debugger")
626 (setq truncate-lines t)
627 (set-syntax-table emacs-lisp-mode-syntax-table)
628 (use-local-map debugger-mode-map)
629 (run-mode-hooks 'debugger-mode-hook))
630
598 (defcustom debugger-record-buffer "*Debugger-record*" 631 (defcustom debugger-record-buffer "*Debugger-record*"
599 "*Buffer name for expression values, for \\[debugger-record-expression]." 632 "*Buffer name for expression values, for \\[debugger-record-expression]."
600 :type 'string 633 :type 'string
601 :group 'debugger 634 :group 'debugger
602 :version "20.3") 635 :version "20.3")
618 (with-current-buffer (get-buffer debugger-record-buffer) 651 (with-current-buffer (get-buffer debugger-record-buffer)
619 (message "%s" 652 (message "%s"
620 (buffer-substring (line-beginning-position 0) 653 (buffer-substring (line-beginning-position 0)
621 (line-end-position 0))))) 654 (line-end-position 0)))))
622 655
623 (put 'debugger-mode 'mode-class 'special) 656 (defun debug-help-follow (&optional pos)
624 657 "Follow cross-reference at POS, defaulting to point.
625 (defun debugger-mode () 658
626 "Mode for backtrace buffers, selected in debugger. 659 For the cross-reference format, see `help-make-xrefs'."
627 \\<debugger-mode-map> 660 (interactive "d")
628 A line starts with `*' if exiting that frame will call the debugger. 661 (require 'help-mode)
629 Type \\[debugger-frame] or \\[debugger-frame-clear] to set or remove the `*'. 662 (unless pos
630 663 (setq pos (point)))
631 When in debugger due to frame being exited, 664 (unless (push-button pos)
632 use the \\[debugger-return-value] command to override the value 665 ;; check if the symbol under point is a function or variable
633 being returned from that frame. 666 (let ((sym
634 667 (intern
635 Use \\[debug-on-entry] and \\[cancel-debug-on-entry] to control 668 (save-excursion
636 which functions will enter the debugger when called. 669 (goto-char pos) (skip-syntax-backward "w_")
637 670 (buffer-substring (point)
638 Complete list of commands: 671 (progn (skip-syntax-forward "w_")
639 \\{debugger-mode-map}" 672 (point)))))))
640 (kill-all-local-variables) 673 (when (or (boundp sym) (fboundp sym) (facep sym))
641 (setq major-mode 'debugger-mode) 674 (switch-to-buffer-other-window (generate-new-buffer "*Help*"))
642 (setq mode-name "Debugger") 675 (help-do-xref pos #'help-xref-interned (list sym))))))
643 (setq truncate-lines t)
644 (set-syntax-table emacs-lisp-mode-syntax-table)
645 (use-local-map debugger-mode-map)
646 (run-mode-hooks 'debugger-mode-hook))
647 676
648 ;; When you change this, you may also need to change the number of 677 ;; When you change this, you may also need to change the number of
649 ;; frames that the debugger skips. 678 ;; frames that the debugger skips.
650 (defun implement-debug-on-entry () 679 (defun implement-debug-on-entry ()
651 "Conditionally call the debugger. 680 "Conditionally call the debugger.