Mercurial > emacs
annotate lisp/emacs-lisp/debug.el @ 42811:cf0c0ef57504
*** empty log message ***
| author | Jason Rumney <jasonr@gnu.org> |
|---|---|
| date | Thu, 17 Jan 2002 19:29:24 +0000 |
| parents | 8e051a31d2cd |
| children | 9af85e74c287 |
| rev | line source |
|---|---|
|
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
477
diff
changeset
|
1 ;;; debug.el --- debuggers and related commands for Emacs |
|
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
477
diff
changeset
|
2 |
| 5545 | 3 ;; Copyright (C) 1985, 1986, 1994 Free Software Foundation, Inc. |
| 845 | 4 |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
5 ;; Maintainer: FSF |
|
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
845
diff
changeset
|
6 ;; Keywords: lisp, tools, maint |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
7 |
| 473 | 8 ;; This file is part of GNU Emacs. |
| 9 | |
| 10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
| 11 ;; it under the terms of the GNU General Public License as published by | |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
12 ;; the Free Software Foundation; either version 2, or (at your option) |
| 473 | 13 ;; any later version. |
| 14 | |
| 15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
| 16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 ;; GNU General Public License for more details. | |
| 19 | |
| 20 ;; You should have received a copy of the GNU General Public License | |
| 14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
| 22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 23 ;; Boston, MA 02111-1307, USA. | |
| 473 | 24 |
|
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
25 ;;; Commentary: |
|
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
26 |
|
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
27 ;; This is a major mode documented in the Emacs manual. |
|
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
28 |
|
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
29 ;;; Code: |
| 473 | 30 |
| 21365 | 31 (defgroup debugger nil |
| 32 "Debuggers and related commands for Emacs." | |
| 33 :prefix "debugger-" | |
| 34 :group 'debug) | |
| 35 | |
| 36 (defcustom debugger-mode-hook nil | |
| 37 "*Hooks run when `debugger-mode' is turned on." | |
| 38 :type 'hook | |
|
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21365
diff
changeset
|
39 :group 'debugger |
|
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21365
diff
changeset
|
40 :version "20.3") |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
41 |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
42 (defcustom debugger-batch-max-lines 40 |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
43 "*Maximum lines to show in debugger buffer in a noninteractive Emacs. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
44 When the debugger is entered and Emacs is running in batch mode, |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
45 if the backtrace text has more than this many lines, |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
46 the middle is discarded, and just the beginning and end are displayed." |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
47 :type 'integer |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
48 :group 'debugger |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
49 :version "21.1") |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
50 |
| 21365 | 51 (defcustom debug-function-list nil |
| 52 "List of functions currently set for debug on entry." | |
| 53 :type '(repeat function) | |
| 54 :group 'debugger) | |
| 473 | 55 |
| 21365 | 56 (defcustom debugger-step-after-exit nil |
| 57 "Non-nil means \"single-step\" after the debugger exits." | |
| 58 :type 'boolean | |
| 59 :group 'debugger) | |
|
10731
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
60 |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
61 (defvar debugger-value nil |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
62 "This is the value for the debugger to return, when it returns.") |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
63 |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
64 (defvar debugger-old-buffer nil |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
65 "This is the buffer that was current when the debugger was entered.") |
|
65e10f44e765
(debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents:
10728
diff
changeset
|
66 |
|
42063
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
67 (defvar debugger-previous-backtrace nil |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
68 "The contents of the previous backtrace (including text properties). |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
69 This is to optimize `debugger-make-xrefs'.") |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
70 |
|
6926
027b7de8a571
(debug, debugger-eval-expression): Preserve match-data.
Karl Heuer <kwzh@gnu.org>
parents:
6567
diff
changeset
|
71 (defvar debugger-outer-match-data) |
|
11062
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
72 (defvar debugger-outer-load-read-function) |
|
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
73 (defvar debugger-outer-overriding-local-map) |
|
18166
84c0a412aa71
(debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents:
17262
diff
changeset
|
74 (defvar debugger-outer-overriding-terminal-local-map) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
75 (defvar debugger-outer-track-mouse) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
76 (defvar debugger-outer-last-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
77 (defvar debugger-outer-this-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
78 (defvar debugger-outer-unread-command-char) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
79 (defvar debugger-outer-unread-command-events) |
|
22921
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
80 (defvar debugger-outer-unread-post-input-method-events) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
81 (defvar debugger-outer-last-input-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
82 (defvar debugger-outer-last-command-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
83 (defvar debugger-outer-last-nonmenu-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
84 (defvar debugger-outer-last-event-frame) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
85 (defvar debugger-outer-standard-input) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
86 (defvar debugger-outer-standard-output) |
|
24741
00ef85c8a0ff
(debugger-outer-inhibit-redisplay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
24524
diff
changeset
|
87 (defvar debugger-outer-inhibit-redisplay) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
88 (defvar debugger-outer-cursor-in-echo-area) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
89 |
| 473 | 90 ;;;###autoload |
| 91 (setq debugger 'debug) | |
| 92 ;;;###autoload | |
| 93 (defun debug (&rest debugger-args) | |
|
6048
ff40882c5578
(debug, debug-on-entry): Doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5585
diff
changeset
|
94 "Enter debugger. To return, type \\<debugger-mode-map>`\\[debugger-continue]'. |
| 473 | 95 Arguments are mainly for use when this is called from the internals |
| 96 of the evaluator. | |
| 97 | |
| 98 You may call with no args, or you may pass nil as the first arg and | |
| 99 any other args you like. In that case, the list of args after the | |
| 100 first will be printed into the backtrace buffer." | |
|
11069
ee94cf4fd05a
(debug): Now interactive.
Richard M. Stallman <rms@gnu.org>
parents:
11062
diff
changeset
|
101 (interactive) |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
102 (unless noninteractive |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
103 (message "Entering debugger...")) |
| 473 | 104 (let (debugger-value |
| 105 (debug-on-error nil) | |
| 106 (debug-on-quit nil) | |
| 107 (debugger-buffer (let ((default-major-mode 'fundamental-mode)) | |
|
6567
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
108 (get-buffer-create "*Backtrace*"))) |
| 473 | 109 (debugger-old-buffer (current-buffer)) |
| 110 (debugger-step-after-exit nil) | |
| 111 ;; Don't keep reading from an executing kbd macro! | |
|
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
112 (executing-kbd-macro nil) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
113 ;; Save the outer values of these vars for the `e' command |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
114 ;; before we replace the values. |
|
6926
027b7de8a571
(debug, debugger-eval-expression): Preserve match-data.
Karl Heuer <kwzh@gnu.org>
parents:
6567
diff
changeset
|
115 (debugger-outer-match-data (match-data)) |
|
11062
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
116 (debugger-outer-load-read-function load-read-function) |
|
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
117 (debugger-outer-overriding-local-map overriding-local-map) |
|
18166
84c0a412aa71
(debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents:
17262
diff
changeset
|
118 (debugger-outer-overriding-terminal-local-map |
|
84c0a412aa71
(debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents:
17262
diff
changeset
|
119 overriding-terminal-local-map) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
120 (debugger-outer-track-mouse track-mouse) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
121 (debugger-outer-last-command last-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
122 (debugger-outer-this-command this-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
123 (debugger-outer-unread-command-char unread-command-char) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
124 (debugger-outer-unread-command-events unread-command-events) |
|
22921
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
125 (debugger-outer-unread-post-input-method-events |
|
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
126 unread-post-input-method-events) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
127 (debugger-outer-last-input-event last-input-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
128 (debugger-outer-last-command-event last-command-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
129 (debugger-outer-last-nonmenu-event last-nonmenu-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
130 (debugger-outer-last-event-frame last-event-frame) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
131 (debugger-outer-standard-input standard-input) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
132 (debugger-outer-standard-output standard-output) |
|
24741
00ef85c8a0ff
(debugger-outer-inhibit-redisplay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
24524
diff
changeset
|
133 (debugger-outer-inhibit-redisplay inhibit-redisplay) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
134 (debugger-outer-cursor-in-echo-area cursor-in-echo-area)) |
|
18190
bca8e581535a
(debug): Set overriding-terminal-local-map to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18166
diff
changeset
|
135 ;; Set this instead of binding it, so that `q' |
|
bca8e581535a
(debug): Set overriding-terminal-local-map to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18166
diff
changeset
|
136 ;; will not restore it. |
|
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
137 (setq overriding-terminal-local-map nil) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
138 ;; Don't let these magic variables affect the debugger itself. |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
139 (let ((last-command nil) this-command track-mouse |
|
5585
0c8f4489999d
(debug): Bind unread-command-char to -1, not nil.
Richard M. Stallman <rms@gnu.org>
parents:
5545
diff
changeset
|
140 (unread-command-char -1) unread-command-events |
|
22921
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
141 unread-post-input-method-events |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
142 last-input-event last-command-event last-nonmenu-event |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
143 last-event-frame |
|
11062
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
144 overriding-local-map |
|
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
145 load-read-function |
|
19889
3e6802bae367
(debug): Allow recursive minibuffers if we're in a minibuffer already.
Richard M. Stallman <rms@gnu.org>
parents:
18383
diff
changeset
|
146 ;; If we are inside a minibuffer, allow nesting |
|
3e6802bae367
(debug): Allow recursive minibuffers if we're in a minibuffer already.
Richard M. Stallman <rms@gnu.org>
parents:
18383
diff
changeset
|
147 ;; so that we don't get an error from the `e' command. |
|
23988
571d2c4f3edf
(debug): Leave recursive minibuffer enabled
Andreas Schwab <schwab@suse.de>
parents:
22921
diff
changeset
|
148 (enable-recursive-minibuffers |
|
571d2c4f3edf
(debug): Leave recursive minibuffer enabled
Andreas Schwab <schwab@suse.de>
parents:
22921
diff
changeset
|
149 (or enable-recursive-minibuffers (> (minibuffer-depth) 0))) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
150 (standard-input t) (standard-output t) |
|
24741
00ef85c8a0ff
(debugger-outer-inhibit-redisplay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
24524
diff
changeset
|
151 inhibit-redisplay |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
152 (cursor-in-echo-area nil)) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
153 (unwind-protect |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
154 (save-excursion |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
155 (save-window-excursion |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
156 (pop-to-buffer debugger-buffer) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
157 (debugger-mode) |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
158 (debugger-setup-buffer debugger-args) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
159 (when noninteractive |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
160 ;; If the backtrace is long, save the beginning |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
161 ;; and the end, but discard the middle. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
162 (when (> (count-lines (point-min) (point-max)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
163 debugger-batch-max-lines) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
164 (goto-char (point-min)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
165 (forward-line (/ 2 debugger-batch-max-lines)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
166 (let ((middlestart (point))) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
167 (goto-char (point-max)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
168 (forward-line (- (/ 2 debugger-batch-max-lines) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
169 debugger-batch-max-lines)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
170 (delete-region middlestart (point))) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
171 (insert "...\n")) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
172 (goto-char (point-min)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
173 (message (buffer-string)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
174 (kill-emacs)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
175 (if (eq (car debugger-args) 'debug) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
176 ;; Skip the frames for backtrace-debug, byte-code, and debug. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
177 (backtrace-debug 3 t)) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
178 (debugger-reenable) |
| 473 | 179 (message "") |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
180 (let ((inhibit-trace t) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
181 (standard-output nil) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
182 (buffer-read-only t)) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
183 (message "") |
|
17262
76bfab081263
(debug): Use save-excursion inside the binding of buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents:
17003
diff
changeset
|
184 ;; Make sure we unbind buffer-read-only in the right buffer. |
|
76bfab081263
(debug): Use save-excursion inside the binding of buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents:
17003
diff
changeset
|
185 (save-excursion |
|
76bfab081263
(debug): Use save-excursion inside the binding of buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents:
17003
diff
changeset
|
186 (recursive-edit))))) |
|
6567
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
187 ;; Kill or at least neuter the backtrace buffer, so that users |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
188 ;; don't try to execute debugger commands in an invalid context. |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
189 (if (get-buffer-window debugger-buffer 'visible) |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
190 ;; Still visible despite the save-window-excursion? Maybe it |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
191 ;; it's in a pop-up frame. It would be annoying to delete and |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
192 ;; recreate it every time the debugger stops, so instead we'll |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
193 ;; erase it but leave it visible. |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
194 (save-excursion |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
195 (set-buffer debugger-buffer) |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
196 (erase-buffer) |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
197 (fundamental-mode)) |
|
baf8fe0c51e3
(debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents:
6468
diff
changeset
|
198 (kill-buffer debugger-buffer)) |
|
21161
37f271ee9f6f
(debug, debugger-env-macro): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents:
20885
diff
changeset
|
199 (set-match-data debugger-outer-match-data))) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
200 ;; Put into effect the modified values of these variables |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
201 ;; in case the user set them with the `e' command. |
|
11062
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
202 (setq load-read-function debugger-outer-load-read-function) |
|
302f676eeca0
(debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10731
diff
changeset
|
203 (setq overriding-local-map debugger-outer-overriding-local-map) |
|
18166
84c0a412aa71
(debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents:
17262
diff
changeset
|
204 (setq overriding-terminal-local-map |
|
84c0a412aa71
(debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents:
17262
diff
changeset
|
205 debugger-outer-overriding-terminal-local-map) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
206 (setq track-mouse debugger-outer-track-mouse) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
207 (setq last-command debugger-outer-last-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
208 (setq this-command debugger-outer-this-command) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
209 (setq unread-command-char debugger-outer-unread-command-char) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
210 (setq unread-command-events debugger-outer-unread-command-events) |
|
22921
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
211 (setq unread-post-input-method-events |
|
48b85e4a4dd3
(debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22114
diff
changeset
|
212 debugger-outer-unread-post-input-method-events) |
|
5544
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
213 (setq last-input-event debugger-outer-last-input-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
214 (setq last-command-event debugger-outer-last-command-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
215 (setq last-nonmenu-event debugger-outer-last-nonmenu-event) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
216 (setq last-event-frame debugger-outer-last-event-frame) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
217 (setq standard-input debugger-outer-standard-input) |
|
ab9c9a611b5a
(debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents:
5430
diff
changeset
|
218 (setq standard-output debugger-outer-standard-output) |
|
24741
00ef85c8a0ff
(debugger-outer-inhibit-redisplay): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
24524
diff
changeset
|
219 (setq inhibit-redisplay debugger-outer-inhibit-redisplay) |
| 5545 | 220 (setq cursor-in-echo-area debugger-outer-cursor-in-echo-area) |
| 473 | 221 (setq debug-on-next-call debugger-step-after-exit) |
| 222 debugger-value)) | |
| 223 | |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
224 (defun debugger-setup-buffer (debugger-args) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
225 "Initialize the `*Backtrace*' buffer for entry to the debugger. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
226 That buffer should be current already." |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
227 (setq buffer-read-only nil) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
228 (erase-buffer) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
229 (set-buffer-multibyte nil) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
230 (let ((standard-output (current-buffer)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
231 (print-escape-newlines t) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
232 (print-level 8) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
233 (print-length 50)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
234 (backtrace)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
235 (goto-char (point-min)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
236 (delete-region (point) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
237 (progn |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
238 (search-forward "\n debug(") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
239 (forward-line 1) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
240 (point))) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
241 (insert "Debugger entered") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
242 ;; lambda is for debug-on-call when a function call is next. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
243 ;; debug is for debug-on-entry function called. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
244 (cond ((memq (car debugger-args) '(lambda debug)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
245 (insert "--entering a function:\n") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
246 (if (eq (car debugger-args) 'debug) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
247 (progn |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
248 (delete-char 1) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
249 (insert ?*) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
250 (beginning-of-line)))) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
251 ;; Exiting a function. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
252 ((eq (car debugger-args) 'exit) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
253 (insert "--returning value: ") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
254 (setq debugger-value (nth 1 debugger-args)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
255 (prin1 debugger-value (current-buffer)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
256 (insert ?\n) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
257 (delete-char 1) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
258 (insert ? ) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
259 (beginning-of-line)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
260 ;; Debugger entered for an error. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
261 ((eq (car debugger-args) 'error) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
262 (insert "--Lisp error: ") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
263 (prin1 (nth 1 debugger-args) (current-buffer)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
264 (insert ?\n)) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
265 ;; debug-on-call, when the next thing is an eval. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
266 ((eq (car debugger-args) t) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
267 (insert "--beginning evaluation of function call form:\n")) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
268 ;; User calls debug directly. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
269 (t |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
270 (insert ": ") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
271 (prin1 (if (eq (car debugger-args) 'nil) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
272 (cdr debugger-args) debugger-args) |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
273 (current-buffer)) |
|
40583
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
274 (insert ?\n))) |
|
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
275 (debugger-make-xrefs)) |
|
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
276 |
|
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
277 (defun debugger-make-xrefs (&optional buffer) |
|
42063
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
278 "Attach cross-references to symbol names in the `*Backtrace*' buffer." |
|
40583
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
279 (interactive "b") |
|
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
280 (save-excursion |
|
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
281 (set-buffer (or buffer (current-buffer))) |
|
42063
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
282 (setq buffer (current-buffer)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
283 (let ((buffer-read-only nil) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
284 (old-end 1) (new-end 1)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
285 ;; If we saved an old backtrace, find the common part |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
286 ;; between the new and the old. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
287 ;; Compare line by line, starting from the end, |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
288 ;; because that's the part that is likely to be unchanged. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
289 (if debugger-previous-backtrace |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
290 (let (old-start new-start (all-match t)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
291 (goto-char (point-max)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
292 (with-temp-buffer |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
293 (insert debugger-previous-backtrace) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
294 (while (and all-match (not (bobp))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
295 (setq old-end (point)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
296 (forward-line -1) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
297 (setq old-start (point)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
298 (with-current-buffer buffer |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
299 (setq new-end (point)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
300 (forward-line -1) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
301 (setq new-start (point))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
302 (if (not (zerop |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
303 (compare-buffer-substrings |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
304 (current-buffer) old-start old-end |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
305 buffer new-start new-end))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
306 (setq all-match nil)))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
307 ;; Now new-end is the position of the start of the |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
308 ;; unchanged part in the current buffer, and old-end is |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
309 ;; the position of that same text in the saved old |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
310 ;; backtrace. But we must subtract 1 since strings are |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
311 ;; indexed in origin 0. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
312 |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
313 ;; Replace the unchanged part of the backtrace |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
314 ;; with the text from debugger-previous-backtrace, |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
315 ;; since that already has the proper xrefs. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
316 ;; With this optimization, we only need to scan |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
317 ;; the changed part of the backtrace. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
318 (delete-region new-end (point-max)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
319 (goto-char (point-max)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
320 (insert (substring debugger-previous-backtrace (1- old-end))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
321 ;; Make the unchanged part of the backtrace inaccessible |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
322 ;; so it won't be scanned. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
323 (narrow-to-region (point-min) new-end))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
324 |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
325 ;; Scan the new part of the backtrace, inserting xrefs. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
326 (goto-char (point-min)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
327 (while (progn |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
328 (skip-syntax-forward "^w_") |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
329 (not (eobp))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
330 (let* ((beg (point)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
331 (end (progn (skip-syntax-forward "w_") (point))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
332 (sym (intern-soft (buffer-substring-no-properties |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
333 beg end))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
334 (file (and sym (symbol-file sym)))) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
335 (when file |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
336 (goto-char beg) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
337 ;; help-xref-button needs to operate on something matched |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
338 ;; by a regexp, so set that up for it. |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
339 (re-search-forward "\\(\\(\\sw\\|\\s_\\)+\\)") |
|
42304
8e051a31d2cd
(debugger-mode-map): Bind C-m, not `RET'.
Richard M. Stallman <rms@gnu.org>
parents:
42078
diff
changeset
|
340 (help-xref-button 1 'help-function-def sym file))) |
|
8e051a31d2cd
(debugger-mode-map): Bind C-m, not `RET'.
Richard M. Stallman <rms@gnu.org>
parents:
42078
diff
changeset
|
341 (forward-line 1)) |
|
42063
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
342 (widen)) |
|
12577e136b14
(debugger-make-xrefs): Optimize by (1) using skip-syntax-forward
Richard M. Stallman <rms@gnu.org>
parents:
40856
diff
changeset
|
343 (setq debugger-previous-backtrace (buffer-string)))) |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
344 |
| 473 | 345 (defun debugger-step-through () |
| 346 "Proceed, stepping through subexpressions of this expression. | |
| 347 Enter another debugger on next entry to eval, apply or funcall." | |
| 348 (interactive) | |
| 349 (setq debugger-step-after-exit t) | |
| 350 (message "Proceeding, will debug on next eval or call.") | |
| 351 (exit-recursive-edit)) | |
| 352 | |
| 353 (defun debugger-continue () | |
| 354 "Continue, evaluating this expression without stopping." | |
| 355 (interactive) | |
|
26948
5385b12ef9a8
(debugger-continue): Don't continue If
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
356 (unless debugger-may-continue |
|
5385b12ef9a8
(debugger-continue): Don't continue If
Gerd Moellmann <gerd@gnu.org>
parents:
26428
diff
changeset
|
357 (error "Cannot continue")) |
| 473 | 358 (message "Continuing.") |
| 359 (exit-recursive-edit)) | |
| 360 | |
| 361 (defun debugger-return-value (val) | |
| 362 "Continue, specifying value to return. | |
| 363 This is only useful when the value returned from the debugger | |
| 364 will be used, such as in a debug on exit from a frame." | |
| 365 (interactive "XReturn value (evaluated): ") | |
| 366 (setq debugger-value val) | |
| 367 (princ "Returning " t) | |
| 368 (prin1 debugger-value) | |
| 369 (exit-recursive-edit)) | |
| 370 | |
|
26325
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
371 ;; Chosen empirically to account for all the frames |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
372 ;; that will exist when debugger-frame is called |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
373 ;; within the first one that appears in the backtrace buffer. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
374 ;; Assumes debugger-frame is called from a key; |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
375 ;; will be wrong if it is called with Meta-x. |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
376 (defconst debugger-frame-offset 8 "") |
|
8523249aaee3
(debug): If noninteractive, display the
Gerd Moellmann <gerd@gnu.org>
parents:
24741
diff
changeset
|
377 |
| 473 | 378 (defun debugger-jump () |
| 379 "Continue to exit from this frame, with all debug-on-entry suspended." | |
| 380 (interactive) | |
| 381 ;; Compensate for the two extra stack frames for debugger-jump. | |
| 382 (let ((debugger-frame-offset (+ debugger-frame-offset 2))) | |
| 383 (debugger-frame)) | |
| 384 ;; Turn off all debug-on-entry functions | |
| 385 ;; but leave them in the list. | |
| 386 (let ((list debug-function-list)) | |
| 387 (while list | |
| 388 (fset (car list) | |
| 389 (debug-on-entry-1 (car list) (symbol-function (car list)) nil)) | |
| 390 (setq list (cdr list)))) | |
| 391 (message "Continuing through this frame") | |
| 392 (exit-recursive-edit)) | |
| 393 | |
| 394 (defun debugger-reenable () | |
| 395 "Turn all debug-on-entry functions back on." | |
| 396 (let ((list debug-function-list)) | |
| 397 (while list | |
| 398 (or (consp (symbol-function (car list))) | |
| 399 (debug-convert-byte-code (car list))) | |
| 400 (fset (car list) | |
| 401 (debug-on-entry-1 (car list) (symbol-function (car list)) t)) | |
| 402 (setq list (cdr list))))) | |
| 403 | |
| 404 (defun debugger-frame-number () | |
| 405 "Return number of frames in backtrace before the one point points at." | |
| 406 (save-excursion | |
| 407 (beginning-of-line) | |
| 408 (let ((opoint (point)) | |
| 409 (count 0)) | |
| 410 (goto-char (point-min)) | |
| 411 (if (or (equal (buffer-substring (point) (+ (point) 6)) | |
| 412 "Signal") | |
| 413 (equal (buffer-substring (point) (+ (point) 6)) | |
| 414 "Return")) | |
| 415 (progn | |
| 416 (search-forward ":") | |
| 417 (forward-sexp 1))) | |
| 418 (forward-line 1) | |
| 419 (while (progn | |
| 420 (forward-char 2) | |
| 421 (if (= (following-char) ?\() | |
| 422 (forward-sexp 1) | |
| 423 (forward-sexp 2)) | |
| 424 (forward-line 1) | |
| 425 (<= (point) opoint)) | |
| 426 (setq count (1+ count))) | |
| 427 count))) | |
| 428 | |
| 429 (defun debugger-frame () | |
| 430 "Request entry to debugger when this frame exits. | |
| 431 Applies to the frame whose line point is on in the backtrace." | |
| 432 (interactive) | |
| 433 (beginning-of-line) | |
| 434 (let ((level (debugger-frame-number))) | |
| 435 (backtrace-debug (+ level debugger-frame-offset) t)) | |
| 436 (if (= (following-char) ? ) | |
| 437 (let ((buffer-read-only nil)) | |
| 438 (delete-char 1) | |
| 439 (insert ?*))) | |
| 440 (beginning-of-line)) | |
| 441 | |
| 442 (defun debugger-frame-clear () | |
|
22114
0fbcff056c0f
(debugger-frame-clear): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
21669
diff
changeset
|
443 "Do not enter debugger when this frame exits. |
| 473 | 444 Applies to the frame whose line point is on in the backtrace." |
| 445 (interactive) | |
| 446 (beginning-of-line) | |
| 447 (let ((level (debugger-frame-number))) | |
| 448 (backtrace-debug (+ level debugger-frame-offset) nil)) | |
| 449 (if (= (following-char) ?*) | |
| 450 (let ((buffer-read-only nil)) | |
| 451 (delete-char 1) | |
| 452 (insert ? ))) | |
| 453 (beginning-of-line)) | |
| 454 | |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
455 |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
456 |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
457 (put 'debugger-env-macro 'lisp-indent-function 0) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
458 (defmacro debugger-env-macro (&rest body) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
459 "Run BODY in original environment." |
|
26428
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
460 `(save-excursion |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
461 (if (null (buffer-name debugger-old-buffer)) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
462 ;; old buffer deleted |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
463 (setq debugger-old-buffer (current-buffer))) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
464 (set-buffer debugger-old-buffer) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
465 (let ((load-read-function debugger-outer-load-read-function) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
466 (overriding-terminal-local-map |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
467 debugger-outer-overriding-terminal-local-map) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
468 (overriding-local-map debugger-outer-overriding-local-map) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
469 (track-mouse debugger-outer-track-mouse) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
470 (last-command debugger-outer-last-command) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
471 (this-command debugger-outer-this-command) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
472 (unread-command-char debugger-outer-unread-command-char) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
473 (unread-command-events debugger-outer-unread-command-events) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
474 (unread-post-input-method-events |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
475 debugger-outer-unread-post-input-method-events) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
476 (last-input-event debugger-outer-last-input-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
477 (last-command-event debugger-outer-last-command-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
478 (last-nonmenu-event debugger-outer-last-nonmenu-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
479 (last-event-frame debugger-outer-last-event-frame) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
480 (standard-input debugger-outer-standard-input) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
481 (standard-output debugger-outer-standard-output) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
482 (inhibit-redisplay debugger-outer-inhibit-redisplay) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
483 (cursor-in-echo-area debugger-outer-cursor-in-echo-area)) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
484 (set-match-data debugger-outer-match-data) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
485 (prog1 (progn ,@body) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
486 (setq debugger-outer-match-data (match-data)) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
487 (setq debugger-outer-load-read-function load-read-function) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
488 (setq debugger-outer-overriding-terminal-local-map |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
489 overriding-terminal-local-map) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
490 (setq debugger-outer-overriding-local-map overriding-local-map) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
491 (setq debugger-outer-track-mouse track-mouse) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
492 (setq debugger-outer-last-command last-command) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
493 (setq debugger-outer-this-command this-command) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
494 (setq debugger-outer-unread-command-char unread-command-char) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
495 (setq debugger-outer-unread-command-events unread-command-events) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
496 (setq debugger-outer-unread-post-input-method-events |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
497 unread-post-input-method-events) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
498 (setq debugger-outer-last-input-event last-input-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
499 (setq debugger-outer-last-command-event last-command-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
500 (setq debugger-outer-last-nonmenu-event last-nonmenu-event) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
501 (setq debugger-outer-last-event-frame last-event-frame) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
502 (setq debugger-outer-standard-input standard-input) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
503 (setq debugger-outer-standard-output standard-output) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
504 (setq debugger-outer-inhibit-redisplay inhibit-redisplay) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
505 (setq debugger-outer-cursor-in-echo-area cursor-in-echo-area) |
|
f572944ca41f
* emacs-lisp/debug.el (debugger-env-macro):
Sam Steingold <sds@gnu.org>
parents:
26325
diff
changeset
|
506 )))) |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
507 |
| 473 | 508 (defun debugger-eval-expression (exp) |
|
6468
b0c731997544
(debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents:
6048
diff
changeset
|
509 "Eval an expression, in an environment like that outside the debugger." |
|
b0c731997544
(debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents:
6048
diff
changeset
|
510 (interactive |
|
b0c731997544
(debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents:
6048
diff
changeset
|
511 (list (read-from-minibuffer "Eval: " |
|
b0c731997544
(debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents:
6048
diff
changeset
|
512 nil read-expression-map t |
|
b0c731997544
(debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents:
6048
diff
changeset
|
513 'read-expression-history))) |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
514 (debugger-env-macro (eval-expression exp))) |
| 473 | 515 |
| 516 (defvar debugger-mode-map nil) | |
|
40583
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
517 (unless debugger-mode-map |
| 473 | 518 (let ((loop ? )) |
| 519 (setq debugger-mode-map (make-keymap)) | |
| 520 (suppress-keymap debugger-mode-map) | |
| 521 (define-key debugger-mode-map "-" 'negative-argument) | |
| 522 (define-key debugger-mode-map "b" 'debugger-frame) | |
| 523 (define-key debugger-mode-map "c" 'debugger-continue) | |
| 524 (define-key debugger-mode-map "j" 'debugger-jump) | |
| 525 (define-key debugger-mode-map "r" 'debugger-return-value) | |
| 526 (define-key debugger-mode-map "u" 'debugger-frame-clear) | |
| 527 (define-key debugger-mode-map "d" 'debugger-step-through) | |
| 528 (define-key debugger-mode-map "l" 'debugger-list-functions) | |
| 529 (define-key debugger-mode-map "h" 'describe-mode) | |
| 530 (define-key debugger-mode-map "q" 'top-level) | |
| 531 (define-key debugger-mode-map "e" 'debugger-eval-expression) | |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
532 (define-key debugger-mode-map " " 'next-line) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
533 (define-key debugger-mode-map "R" 'debugger-record-expression) |
|
42304
8e051a31d2cd
(debugger-mode-map): Bind C-m, not `RET'.
Richard M. Stallman <rms@gnu.org>
parents:
42078
diff
changeset
|
534 (define-key debugger-mode-map "\C-m" 'help-follow) |
|
40583
87996dd441b7
easy source access from the *debugger* buffer
Sam Steingold <sds@gnu.org>
parents:
26948
diff
changeset
|
535 (define-key debugger-mode-map [mouse-2] 'push-button) |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
536 )) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
537 |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
538 |
| 21365 | 539 (defcustom debugger-record-buffer "*Debugger-record*" |
| 540 "*Buffer name for expression values, for \\[debugger-record-expression]." | |
| 541 :type 'string | |
|
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21365
diff
changeset
|
542 :group 'debugger |
|
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21365
diff
changeset
|
543 :version "20.3") |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
544 |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
545 (defun debugger-record-expression (exp) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
546 "Display a variable's value and record it in `*Backtrace-record*' buffer." |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
547 (interactive |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
548 (list (read-from-minibuffer |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
549 "Record Eval: " |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
550 nil |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
551 read-expression-map t |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
552 'read-expression-history))) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
553 (let* ((buffer (get-buffer-create debugger-record-buffer)) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
554 (standard-output buffer)) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
555 (princ (format "Debugger Eval (%s): " exp)) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
556 (princ (debugger-eval-expression exp)) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
557 (terpri)) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
558 |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
559 (with-current-buffer (get-buffer debugger-record-buffer) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
560 (save-excursion |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
561 (forward-line -1) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
562 (message |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
563 (buffer-substring (point) (progn (end-of-line) (point))))))) |
| 473 | 564 |
| 565 (put 'debugger-mode 'mode-class 'special) | |
| 566 | |
| 567 (defun debugger-mode () | |
| 568 "Mode for backtrace buffers, selected in debugger. | |
| 569 \\<debugger-mode-map> | |
| 570 A line starts with `*' if exiting that frame will call the debugger. | |
| 571 Type \\[debugger-frame] or \\[debugger-frame-clear] to set or remove the `*'. | |
| 572 | |
| 573 When in debugger due to frame being exited, | |
| 574 use the \\[debugger-return-value] command to override the value | |
| 575 being returned from that frame. | |
| 576 | |
| 577 Use \\[debug-on-entry] and \\[cancel-debug-on-entry] to control | |
| 578 which functions will enter the debugger when called. | |
| 579 | |
| 580 Complete list of commands: | |
| 581 \\{debugger-mode-map}" | |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
582 (kill-all-local-variables) |
| 473 | 583 (setq major-mode 'debugger-mode) |
| 584 (setq mode-name "Debugger") | |
| 585 (setq truncate-lines t) | |
| 586 (set-syntax-table emacs-lisp-mode-syntax-table) | |
|
20403
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
587 (use-local-map debugger-mode-map) |
|
698119867c21
(debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents:
19889
diff
changeset
|
588 (run-hooks 'debugger-mode-hook)) |
| 473 | 589 |
| 590 ;;;###autoload | |
| 591 (defun debug-on-entry (function) | |
| 592 "Request FUNCTION to invoke debugger each time it is called. | |
|
6048
ff40882c5578
(debug, debug-on-entry): Doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5585
diff
changeset
|
593 If you tell the debugger to continue, FUNCTION's execution proceeds. |
|
ff40882c5578
(debug, debug-on-entry): Doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5585
diff
changeset
|
594 This works by modifying the definition of FUNCTION, |
| 473 | 595 which must be written in Lisp, not predefined. |
| 596 Use \\[cancel-debug-on-entry] to cancel the effect of this command. | |
|
6048
ff40882c5578
(debug, debug-on-entry): Doc strings.
Richard M. Stallman <rms@gnu.org>
parents:
5585
diff
changeset
|
597 Redefining FUNCTION also cancels it." |
| 473 | 598 (interactive "aDebug on entry (to function): ") |
| 599 (debugger-reenable) | |
|
20404
7cce7f974c78
(debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents:
20403
diff
changeset
|
600 ;; Handle a function that has been aliased to some other function. |
|
7cce7f974c78
(debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents:
20403
diff
changeset
|
601 (if (symbolp (symbol-function function)) |
|
7cce7f974c78
(debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents:
20403
diff
changeset
|
602 (fset function `(lambda (&rest debug-on-entry-args) |
|
7cce7f974c78
(debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents:
20403
diff
changeset
|
603 (apply ',(symbol-function function) |
|
7cce7f974c78
(debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents:
20403
diff
changeset
|
604 debug-on-entry-args)))) |
| 473 | 605 (if (subrp (symbol-function function)) |
| 606 (error "Function %s is a primitive" function)) | |
| 607 (or (consp (symbol-function function)) | |
| 608 (debug-convert-byte-code function)) | |
| 609 (or (consp (symbol-function function)) | |
| 610 (error "Definition of %s is not a list" function)) | |
| 611 (fset function (debug-on-entry-1 function (symbol-function function) t)) | |
| 612 (or (memq function debug-function-list) | |
| 613 (setq debug-function-list (cons function debug-function-list))) | |
| 614 function) | |
| 615 | |
| 616 ;;;###autoload | |
| 617 (defun cancel-debug-on-entry (&optional function) | |
| 618 "Undo effect of \\[debug-on-entry] on FUNCTION. | |
| 619 If argument is nil or an empty string, cancel for all functions." | |
| 477 | 620 (interactive |
| 621 (list (let ((name | |
| 622 (completing-read "Cancel debug on entry (to function): " | |
| 623 ;; Make an "alist" of the functions | |
| 624 ;; that now have debug on entry. | |
| 625 (mapcar 'list | |
| 626 (mapcar 'symbol-name | |
| 627 debug-function-list)) | |
| 628 nil t nil))) | |
| 629 (if name (intern name))))) | |
| 473 | 630 (debugger-reenable) |
| 631 (if (and function (not (string= function ""))) | |
| 632 (progn | |
| 633 (fset function | |
| 634 (debug-on-entry-1 function (symbol-function function) nil)) | |
| 635 (setq debug-function-list (delq function debug-function-list)) | |
| 636 function) | |
| 637 (message "Cancelling debug-on-entry for all functions") | |
| 638 (mapcar 'cancel-debug-on-entry debug-function-list))) | |
| 639 | |
| 640 (defun debug-convert-byte-code (function) | |
| 641 (let ((defn (symbol-function function))) | |
| 642 (if (not (consp defn)) | |
| 643 ;; Assume a compiled code object. | |
| 644 (let* ((contents (append defn nil)) | |
| 645 (body | |
| 646 (list (list 'byte-code (nth 1 contents) | |
| 647 (nth 2 contents) (nth 3 contents))))) | |
| 648 (if (nthcdr 5 contents) | |
| 649 (setq body (cons (list 'interactive (nth 5 contents)) body))) | |
| 650 (if (nth 4 contents) | |
|
10571
0bd8034a4f54
(debug-convert-byte-code): Convert the doc info to a string.
Richard M. Stallman <rms@gnu.org>
parents:
9857
diff
changeset
|
651 ;; Use `documentation' here, to get the actual string, |
|
0bd8034a4f54
(debug-convert-byte-code): Convert the doc info to a string.
Richard M. Stallman <rms@gnu.org>
parents:
9857
diff
changeset
|
652 ;; in case the compiled function has a reference |
|
0bd8034a4f54
(debug-convert-byte-code): Convert the doc info to a string.
Richard M. Stallman <rms@gnu.org>
parents:
9857
diff
changeset
|
653 ;; to the .elc file. |
|
0bd8034a4f54
(debug-convert-byte-code): Convert the doc info to a string.
Richard M. Stallman <rms@gnu.org>
parents:
9857
diff
changeset
|
654 (setq body (cons (documentation function) body))) |
| 473 | 655 (fset function (cons 'lambda (cons (car contents) body))))))) |
| 656 | |
| 657 (defun debug-on-entry-1 (function defn flag) | |
| 658 (if (subrp defn) | |
| 659 (error "%s is a built-in function" function) | |
| 660 (if (eq (car defn) 'macro) | |
| 661 (debug-on-entry-1 function (cdr defn) flag) | |
| 662 (or (eq (car defn) 'lambda) | |
| 663 (error "%s not user-defined Lisp function" function)) | |
| 664 (let (tail prec) | |
| 665 (if (stringp (car (nthcdr 2 defn))) | |
| 666 (setq tail (nthcdr 3 defn) | |
| 667 prec (list (car defn) (car (cdr defn)) | |
| 668 (car (cdr (cdr defn))))) | |
| 669 (setq tail (nthcdr 2 defn) | |
| 670 prec (list (car defn) (car (cdr defn))))) | |
| 671 (if (eq flag (equal (car tail) '(debug 'debug))) | |
| 672 defn | |
| 673 (if flag | |
| 674 (nconc prec (cons '(debug 'debug) tail)) | |
| 675 (nconc prec (cdr tail)))))))) | |
| 676 | |
| 677 (defun debugger-list-functions () | |
| 678 "Display a list of all the functions now set to debug on entry." | |
| 679 (interactive) | |
| 680 (with-output-to-temp-buffer "*Help*" | |
| 681 (if (null debug-function-list) | |
| 682 (princ "No debug-on-entry functions now\n") | |
| 683 (princ "Functions set to debug on entry:\n\n") | |
| 684 (let ((list debug-function-list)) | |
| 685 (while list | |
| 686 (prin1 (car list)) | |
| 687 (terpri) | |
| 688 (setq list (cdr list)))) | |
| 689 (princ "Note: if you have redefined a function, then it may no longer\n") | |
|
9857
b1455d954e44
(debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
6926
diff
changeset
|
690 (princ "be set to debug on entry, even if it is in the list.")) |
|
b1455d954e44
(debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
6926
diff
changeset
|
691 (save-excursion |
|
b1455d954e44
(debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
6926
diff
changeset
|
692 (set-buffer standard-output) |
|
b1455d954e44
(debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents:
6926
diff
changeset
|
693 (help-mode)))) |
|
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
477
diff
changeset
|
694 |
| 18383 | 695 (provide 'debug) |
| 696 | |
|
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
477
diff
changeset
|
697 ;;; debug.el ends here |
