1 |
;;; debug.el --- debuggers and related commands for Emacs |
;;; debug.el --- debuggers and related commands for Emacs |
2 |
|
|
3 |
;; Copyright (C) 1985, 1986, 1994, 2001, 2003 Free Software Foundation, Inc. |
;; Copyright (C) 1985, 1986, 1994, 2001, 2003, 2005 |
4 |
|
;; Free Software Foundation, Inc. |
5 |
|
|
6 |
;; Maintainer: FSF |
;; Maintainer: FSF |
7 |
;; Keywords: lisp, tools, maint |
;; Keywords: lisp, tools, maint |
189 |
(backtrace-debug 3 t)) |
(backtrace-debug 3 t)) |
190 |
(debugger-reenable) |
(debugger-reenable) |
191 |
(message "") |
(message "") |
192 |
(let ((inhibit-trace t) |
(let ((standard-output nil) |
|
(standard-output nil) |
|
193 |
(buffer-read-only t)) |
(buffer-read-only t)) |
194 |
(message "") |
(message "") |
195 |
;; Make sure we unbind buffer-read-only in the right buffer. |
;; Make sure we unbind buffer-read-only in the right buffer. |
197 |
(recursive-edit))))) |
(recursive-edit))))) |
198 |
;; Kill or at least neuter the backtrace buffer, so that users |
;; Kill or at least neuter the backtrace buffer, so that users |
199 |
;; don't try to execute debugger commands in an invalid context. |
;; don't try to execute debugger commands in an invalid context. |
200 |
(if (get-buffer-window debugger-buffer 'visible) |
(if (get-buffer-window debugger-buffer 0) |
201 |
;; Still visible despite the save-window-excursion? Maybe it |
;; Still visible despite the save-window-excursion? Maybe it |
202 |
;; it's in a pop-up frame. It would be annoying to delete and |
;; it's in a pop-up frame. It would be annoying to delete and |
203 |
;; recreate it every time the debugger stops, so instead we'll |
;; recreate it every time the debugger stops, so instead we'll |
204 |
;; erase it but leave it visible. |
;; erase it and hide it but keep it alive. |
205 |
(save-excursion |
(with-current-buffer debugger-buffer |
|
(set-buffer debugger-buffer) |
|
206 |
(erase-buffer) |
(erase-buffer) |
207 |
(fundamental-mode)) |
(fundamental-mode) |
208 |
|
(with-selected-window (get-buffer-window debugger-buffer 0) |
209 |
|
(bury-buffer))) |
210 |
(kill-buffer debugger-buffer)) |
(kill-buffer debugger-buffer)) |
211 |
(set-match-data debugger-outer-match-data))) |
(set-match-data debugger-outer-match-data))) |
212 |
;; Put into effect the modified values of these variables |
;; Put into effect the modified values of these variables |
544 |
'read-expression-history))) |
'read-expression-history))) |
545 |
(debugger-env-macro (eval-expression exp))) |
(debugger-env-macro (eval-expression exp))) |
546 |
|
|
547 |
(defvar debugger-mode-map nil) |
(defvar debugger-mode-map |
548 |
(unless debugger-mode-map |
(let ((map (make-keymap))) |
549 |
(let ((loop ? )) |
(set-keymap-parent map button-buffer-map) |
550 |
(setq debugger-mode-map (make-keymap)) |
(suppress-keymap map) |
551 |
(set-keymap-parent debugger-mode-map button-buffer-map) |
(define-key map "-" 'negative-argument) |
552 |
(suppress-keymap debugger-mode-map) |
(define-key map "b" 'debugger-frame) |
553 |
(define-key debugger-mode-map "-" 'negative-argument) |
(define-key map "c" 'debugger-continue) |
554 |
(define-key debugger-mode-map "b" 'debugger-frame) |
(define-key map "j" 'debugger-jump) |
555 |
(define-key debugger-mode-map "c" 'debugger-continue) |
(define-key map "r" 'debugger-return-value) |
556 |
(define-key debugger-mode-map "j" 'debugger-jump) |
(define-key map "u" 'debugger-frame-clear) |
557 |
(define-key debugger-mode-map "r" 'debugger-return-value) |
(define-key map "d" 'debugger-step-through) |
558 |
(define-key debugger-mode-map "u" 'debugger-frame-clear) |
(define-key map "l" 'debugger-list-functions) |
559 |
(define-key debugger-mode-map "d" 'debugger-step-through) |
(define-key map "h" 'describe-mode) |
560 |
(define-key debugger-mode-map "l" 'debugger-list-functions) |
(define-key map "q" 'top-level) |
561 |
(define-key debugger-mode-map "h" 'describe-mode) |
(define-key map "e" 'debugger-eval-expression) |
562 |
(define-key debugger-mode-map "q" 'top-level) |
(define-key map " " 'next-line) |
563 |
(define-key debugger-mode-map "e" 'debugger-eval-expression) |
(define-key map "R" 'debugger-record-expression) |
564 |
(define-key debugger-mode-map " " 'next-line) |
(define-key map "\C-m" 'help-follow) |
565 |
(define-key debugger-mode-map "R" 'debugger-record-expression) |
(define-key map [mouse-2] 'push-button) |
566 |
(define-key debugger-mode-map "\C-m" 'help-follow) |
map)) |
|
(define-key debugger-mode-map [mouse-2] 'push-button) |
|
|
)) |
|
|
|
|
567 |
|
|
568 |
(defcustom debugger-record-buffer "*Debugger-record*" |
(defcustom debugger-record-buffer "*Debugger-record*" |
569 |
"*Buffer name for expression values, for \\[debugger-record-expression]." |
"*Buffer name for expression values, for \\[debugger-record-expression]." |
614 |
(setq truncate-lines t) |
(setq truncate-lines t) |
615 |
(set-syntax-table emacs-lisp-mode-syntax-table) |
(set-syntax-table emacs-lisp-mode-syntax-table) |
616 |
(use-local-map debugger-mode-map) |
(use-local-map debugger-mode-map) |
617 |
(run-hooks 'debugger-mode-hook)) |
(run-mode-hooks 'debugger-mode-hook)) |
618 |
|
|
619 |
;;;###autoload |
;;;###autoload |
620 |
(defun debug-on-entry (function) |
(defun debug-on-entry (function) |
714 |
(defun debugger-list-functions () |
(defun debugger-list-functions () |
715 |
"Display a list of all the functions now set to debug on entry." |
"Display a list of all the functions now set to debug on entry." |
716 |
(interactive) |
(interactive) |
717 |
(with-output-to-temp-buffer "*Help*" |
(require 'help-mode) |
718 |
(if (null debug-function-list) |
(help-setup-xref '(debugger-list-functions) (interactive-p)) |
719 |
(princ "No debug-on-entry functions now\n") |
(with-output-to-temp-buffer (help-buffer) |
720 |
(princ "Functions set to debug on entry:\n\n") |
(with-current-buffer standard-output |
721 |
(let ((list debug-function-list)) |
(if (null debug-function-list) |
722 |
(while list |
(princ "No debug-on-entry functions now\n") |
723 |
(prin1 (car list)) |
(princ "Functions set to debug on entry:\n\n") |
724 |
(terpri) |
(dolist (fun debug-function-list) |
725 |
(setq list (cdr list)))) |
(make-text-button (point) (progn (prin1 fun) (point)) |
726 |
(princ "Note: if you have redefined a function, then it may no longer\n") |
'type 'help-function |
727 |
(princ "be set to debug on entry, even if it is in the list.")) |
'help-args (list fun)) |
728 |
(save-excursion |
(terpri)) |
729 |
(set-buffer standard-output) |
(terpri) |
730 |
(help-mode)))) |
(princ "Note: if you have redefined a function, then it may no longer\n") |
731 |
|
(princ "be set to debug on entry, even if it is in the list."))))) |
732 |
|
|
733 |
(provide 'debug) |
(provide 'debug) |
734 |
|
|
735 |
;;; arch-tag: b6ec7047-f801-4103-9c63-d69322db9d3b |
;; arch-tag: b6ec7047-f801-4103-9c63-d69322db9d3b |
736 |
;;; debug.el ends here |
;;; debug.el ends here |