annotate lisp/emacs-lisp/debug.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 571d2c4f3edf
children d46353824322
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a908c6a5d8da (debug): Fixed typo.
Roland McGrath <roland@gnu.org>
parents: 5544
diff changeset
3 ;; Copyright (C) 1985, 1986, 1994 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
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
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; any later version.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; GNU General Public License for more details.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13955
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13955
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13955
diff changeset
23 ;; Boston, MA 02111-1307, USA.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
31 (defgroup debugger nil
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
32 "Debuggers and related commands for Emacs."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
33 :prefix "debugger-"
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
34 :group 'debug)
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
35
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
36 (defcustom debugger-mode-hook nil
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
37 "*Hooks run when `debugger-mode' is turned on."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
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
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
42
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
43 (defcustom debug-function-list nil
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
44 "List of functions currently set for debug on entry."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
45 :type '(repeat function)
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
46 :group 'debugger)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
48 (defcustom debugger-step-after-exit nil
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
49 "Non-nil means \"single-step\" after the debugger exits."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
50 :type 'boolean
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
51 :group 'debugger)
10731
65e10f44e765 (debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents: 10728
diff changeset
52
65e10f44e765 (debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents: 10728
diff changeset
53 (defvar debugger-value nil
65e10f44e765 (debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents: 10728
diff changeset
54 "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
55
65e10f44e765 (debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents: 10728
diff changeset
56 (defvar debugger-old-buffer nil
65e10f44e765 (debugger-step-after-exit): Variable declared.
Richard M. Stallman <rms@gnu.org>
parents: 10728
diff changeset
57 "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
58
6926
027b7de8a571 (debug, debugger-eval-expression): Preserve match-data.
Karl Heuer <kwzh@gnu.org>
parents: 6567
diff changeset
59 (defvar debugger-outer-match-data)
11062
302f676eeca0 (debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10731
diff changeset
60 (defvar debugger-outer-load-read-function)
302f676eeca0 (debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10731
diff changeset
61 (defvar debugger-outer-overriding-local-map)
18166
84c0a412aa71 (debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents: 17262
diff changeset
62 (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
63 (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
64 (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
65 (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
66 (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
67 (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
68 (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
69 (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
70 (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
71 (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
72 (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
73 (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
74 (defvar debugger-outer-standard-output)
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-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
76
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 (setq debugger 'debug)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 (defun debug (&rest debugger-args)
6048
ff40882c5578 (debug, debug-on-entry): Doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 5585
diff changeset
81 "Enter debugger. To return, type \\<debugger-mode-map>`\\[debugger-continue]'.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 Arguments are mainly for use when this is called from the internals
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 of the evaluator.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 You may call with no args, or you may pass nil as the first arg and
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 any other args you like. In that case, the list of args after the
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 first will be printed into the backtrace buffer."
11069
ee94cf4fd05a (debug): Now interactive.
Richard M. Stallman <rms@gnu.org>
parents: 11062
diff changeset
88 (interactive)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 (message "Entering debugger...")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 (let (debugger-value
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 (debug-on-error nil)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 (debug-on-quit nil)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 (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
94 (get-buffer-create "*Backtrace*")))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 (debugger-old-buffer (current-buffer))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 (debugger-step-after-exit nil)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 ;; 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
98 (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
99 ;; 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
100 ;; before we replace the values.
6926
027b7de8a571 (debug, debugger-eval-expression): Preserve match-data.
Karl Heuer <kwzh@gnu.org>
parents: 6567
diff changeset
101 (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
102 (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
103 (debugger-outer-overriding-local-map overriding-local-map)
18166
84c0a412aa71 (debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents: 17262
diff changeset
104 (debugger-outer-overriding-terminal-local-map
84c0a412aa71 (debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents: 17262
diff changeset
105 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
106 (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
107 (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
108 (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
109 (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
110 (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
111 (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
112 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
113 (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
114 (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
115 (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
116 (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
117 (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
118 (debugger-outer-standard-output standard-output)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
119 (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
120 ;; 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
121 ;; will not restore it.
bca8e581535a (debug): Set overriding-terminal-local-map to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18166
diff changeset
122 (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
123 ;; 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
124 (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
125 (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
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 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
128 last-event-frame
11062
302f676eeca0 (debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10731
diff changeset
129 overriding-local-map
302f676eeca0 (debugger-outer-load-read-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10731
diff changeset
130 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
131 ;; 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
132 ;; 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
133 (enable-recursive-minibuffers
571d2c4f3edf (debug): Leave recursive minibuffer enabled
Andreas Schwab <schwab@suse.de>
parents: 22921
diff changeset
134 (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
135 (standard-input t) (standard-output t)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
136 (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
137 (unwind-protect
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
138 (save-excursion
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
139 (save-window-excursion
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
140 (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
141 (erase-buffer)
20885
9bd868e76aa5 (debugger-mode): Don't set enable-multibyte-characters here.
Richard M. Stallman <rms@gnu.org>
parents: 20404
diff changeset
142 (set-buffer-multibyte nil)
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
143 (let ((standard-output (current-buffer))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
144 (print-escape-newlines t)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
145 (print-length 50))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
146 (backtrace))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
147 (goto-char (point-min))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
148 (debugger-mode)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
149 (delete-region (point)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
150 (progn
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
151 (search-forward "\n debug(")
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
152 (forward-line 1)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
153 (point)))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
154 (debugger-reenable)
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
155 ;; lambda is for debug-on-call when a function call is next.
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
156 ;; debug is for debug-on-entry function called.
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
157 (cond ((memq (car debugger-args) '(lambda debug))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
158 (insert "Entering:\n")
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
159 (if (eq (car debugger-args) 'debug)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
160 (progn
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
161 ;; Skip the frames for backtrace-debug, byte-code,
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
162 ;; and debug.
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
163 (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
164 (delete-char 1)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
165 (insert ?*)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
166 (beginning-of-line))))
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
167 ;; Exiting a function.
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
168 ((eq (car debugger-args) 'exit)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
169 (insert "Return value: ")
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
170 (setq debugger-value (nth 1 debugger-args))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
171 (prin1 debugger-value (current-buffer))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
172 (insert ?\n)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
173 (delete-char 1)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
174 (insert ? )
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
175 (beginning-of-line))
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
176 ;; Debugger entered for an error.
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
177 ((eq (car debugger-args) 'error)
13955
1d991598b3b7 (debug): Fix message spelling.
Karl Heuer <kwzh@gnu.org>
parents: 11069
diff changeset
178 (insert "Signaling: ")
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
179 (prin1 (nth 1 debugger-args) (current-buffer))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
180 (insert ?\n))
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
181 ;; debug-on-call, when the next thing is an eval.
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
182 ((eq (car debugger-args) t)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
183 (insert "Beginning evaluation of function call form:\n"))
10728
48f895a471a2 (debug): Fix arg to backtrace-debug for debug-on-entry.
Richard M. Stallman <rms@gnu.org>
parents: 10571
diff changeset
184 ;; User calls debug directly.
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
185 (t
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
186 (prin1 (if (eq (car debugger-args) 'nil)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
187 (cdr debugger-args) debugger-args)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
188 (current-buffer))
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
189 (insert ?\n)))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 (message "")
5544
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
191 (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
192 (standard-output nil)
ab9c9a611b5a (debug): Bind a bunch of vars, like last-command, to
Richard M. Stallman <rms@gnu.org>
parents: 5430
diff changeset
193 (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
194 (message "")
17262
76bfab081263 (debug): Use save-excursion inside the binding of buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents: 17003
diff changeset
195 ;; 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
196 (save-excursion
76bfab081263 (debug): Use save-excursion inside the binding of buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents: 17003
diff changeset
197 (recursive-edit)))))
6567
baf8fe0c51e3 (debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents: 6468
diff changeset
198 ;; 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
199 ;; 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
200 (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
201 ;; 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
202 ;; 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
203 ;; 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
204 ;; 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
205 (save-excursion
baf8fe0c51e3 (debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents: 6468
diff changeset
206 (set-buffer debugger-buffer)
baf8fe0c51e3 (debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents: 6468
diff changeset
207 (erase-buffer)
baf8fe0c51e3 (debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents: 6468
diff changeset
208 (fundamental-mode))
baf8fe0c51e3 (debug): Behave sensibly if pop-up-frames is set.
Karl Heuer <kwzh@gnu.org>
parents: 6468
diff changeset
209 (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
210 (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
211 ;; 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
212 ;; 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
213 (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
214 (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
215 (setq overriding-terminal-local-map
84c0a412aa71 (debug, debugger-eval-expression):
Richard M. Stallman <rms@gnu.org>
parents: 17262
diff changeset
216 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
217 (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
218 (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
219 (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
220 (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
221 (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
222 (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
223 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
224 (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
225 (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
226 (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
227 (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
228 (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
229 (setq standard-output debugger-outer-standard-output)
5545
a908c6a5d8da (debug): Fixed typo.
Roland McGrath <roland@gnu.org>
parents: 5544
diff changeset
230 (setq cursor-in-echo-area debugger-outer-cursor-in-echo-area)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (setq debug-on-next-call debugger-step-after-exit)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 debugger-value))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (defun debugger-step-through ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 "Proceed, stepping through subexpressions of this expression.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 Enter another debugger on next entry to eval, apply or funcall."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 (setq debugger-step-after-exit t)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (message "Proceeding, will debug on next eval or call.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (exit-recursive-edit))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (defun debugger-continue ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 "Continue, evaluating this expression without stopping."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (message "Continuing.")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (exit-recursive-edit))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (defun debugger-return-value (val)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 "Continue, specifying value to return.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 This is only useful when the value returned from the debugger
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 will be used, such as in a debug on exit from a frame."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 (interactive "XReturn value (evaluated): ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 (setq debugger-value val)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (princ "Returning " t)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 (prin1 debugger-value)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (exit-recursive-edit))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (defun debugger-jump ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 "Continue to exit from this frame, with all debug-on-entry suspended."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 ;; Compensate for the two extra stack frames for debugger-jump.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 (let ((debugger-frame-offset (+ debugger-frame-offset 2)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (debugger-frame))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 ;; Turn off all debug-on-entry functions
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 ;; but leave them in the list.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (let ((list debug-function-list))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 (while list
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (fset (car list)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 (debug-on-entry-1 (car list) (symbol-function (car list)) nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (setq list (cdr list))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (message "Continuing through this frame")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (exit-recursive-edit))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (defun debugger-reenable ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 "Turn all debug-on-entry functions back on."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 (let ((list debug-function-list))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 (while list
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 (or (consp (symbol-function (car list)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 (debug-convert-byte-code (car list)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 (fset (car list)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 (debug-on-entry-1 (car list) (symbol-function (car list)) t))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 (setq list (cdr list)))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (defun debugger-frame-number ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 "Return number of frames in backtrace before the one point points at."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (save-excursion
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (beginning-of-line)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (let ((opoint (point))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (count 0))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (goto-char (point-min))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 (if (or (equal (buffer-substring (point) (+ (point) 6))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 "Signal")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 (equal (buffer-substring (point) (+ (point) 6))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 "Return"))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (progn
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (search-forward ":")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (forward-sexp 1)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (forward-line 1)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 (while (progn
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 (forward-char 2)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 (if (= (following-char) ?\()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 (forward-sexp 1)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 (forward-sexp 2))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (forward-line 1)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 (<= (point) opoint))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 (setq count (1+ count)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 count)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 ;; Chosen empirically to account for all the frames
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 ;; that will exist when debugger-frame is called
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 ;; within the first one that appears in the backtrace buffer.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 ;; Assumes debugger-frame is called from a key;
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 ;; will be wrong if it is called with Meta-x.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 (defconst debugger-frame-offset 8 "")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 (defun debugger-frame ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 "Request entry to debugger when this frame exits.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 Applies to the frame whose line point is on in the backtrace."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (beginning-of-line)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 (let ((level (debugger-frame-number)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 (backtrace-debug (+ level debugger-frame-offset) t))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 (if (= (following-char) ? )
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (let ((buffer-read-only nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 (delete-char 1)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 (insert ?*)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (beginning-of-line))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 (defun debugger-frame-clear ()
22114
0fbcff056c0f (debugger-frame-clear): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21669
diff changeset
330 "Do not enter debugger when this frame exits.
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 Applies to the frame whose line point is on in the backtrace."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 (beginning-of-line)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 (let ((level (debugger-frame-number)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (backtrace-debug (+ level debugger-frame-offset) nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 (if (= (following-char) ?*)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 (let ((buffer-read-only nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 (delete-char 1)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 (insert ? )))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 (beginning-of-line))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
342
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
343
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
344 (put 'debugger-env-macro 'lisp-indent-function 0)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
345 (defmacro debugger-env-macro (&rest body)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
346 "Run BODY in original environment."
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
347 (`
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
348 (save-excursion
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
349 (if (null (buffer-name debugger-old-buffer))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
350 ;; old buffer deleted
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
351 (setq debugger-old-buffer (current-buffer)))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
352 (set-buffer debugger-old-buffer)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
353 (let ((track-mouse debugger-outer-track-mouse)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
354 (last-command debugger-outer-last-command)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
355 (this-command debugger-outer-this-command)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
356 (unread-command-char debugger-outer-unread-command-char)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
357 (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
358 (unread-post-input-method-events
48b85e4a4dd3 (debugger-outer-unread-post-input-method-events): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22114
diff changeset
359 debugger-outer-unread-post-input-method-events)
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
360 (last-input-event debugger-outer-last-input-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
361 (last-command-event debugger-outer-last-command-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
362 (last-nonmenu-event debugger-outer-last-nonmenu-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
363 (last-event-frame debugger-outer-last-event-frame)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
364 (standard-input debugger-outer-standard-input)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
365 (standard-output debugger-outer-standard-output)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
366 (cursor-in-echo-area debugger-outer-cursor-in-echo-area)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
367 (overriding-local-map debugger-outer-overriding-local-map)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
368 (overriding-terminal-local-map
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
369 debugger-outer-overriding-terminal-local-map)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
370 (load-read-function debugger-outer-load-read-function))
21161
37f271ee9f6f (debug, debugger-env-macro): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents: 20885
diff changeset
371 (set-match-data debugger-outer-match-data)
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
372 (prog1 (progn (,@ body))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
373 (setq debugger-outer-match-data (match-data))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
374 (setq debugger-outer-load-read-function load-read-function)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
375 (setq debugger-outer-overriding-terminal-local-map
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
376 overriding-terminal-local-map)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
377 (setq debugger-outer-overriding-local-map overriding-local-map)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
378 (setq debugger-outer-track-mouse track-mouse)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
379 (setq debugger-outer-last-command last-command)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
380 (setq debugger-outer-this-command this-command)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
381 (setq debugger-outer-unread-command-char unread-command-char)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
382 (setq 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
383 (setq 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
384 unread-post-input-method-events)
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
385 (setq debugger-outer-last-input-event last-input-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
386 (setq debugger-outer-last-command-event last-command-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
387 (setq debugger-outer-last-nonmenu-event last-nonmenu-event)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
388 (setq debugger-outer-last-event-frame last-event-frame)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
389 (setq debugger-outer-standard-input standard-input)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
390 (setq debugger-outer-standard-output standard-output)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
391 (setq debugger-outer-cursor-in-echo-area cursor-in-echo-area)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
392 )))))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
393
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 (defun debugger-eval-expression (exp)
6468
b0c731997544 (debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents: 6048
diff changeset
395 "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
396 (interactive
b0c731997544 (debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents: 6048
diff changeset
397 (list (read-from-minibuffer "Eval: "
b0c731997544 (debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents: 6048
diff changeset
398 nil read-expression-map t
b0c731997544 (debugger-eval-expression): Use a history list.
Richard M. Stallman <rms@gnu.org>
parents: 6048
diff changeset
399 'read-expression-history)))
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
400 (debugger-env-macro (eval-expression exp)))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 (defvar debugger-mode-map nil)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 (if debugger-mode-map
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 nil
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 (let ((loop ? ))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 (setq debugger-mode-map (make-keymap))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 (suppress-keymap debugger-mode-map)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 (define-key debugger-mode-map "-" 'negative-argument)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 (define-key debugger-mode-map "b" 'debugger-frame)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 (define-key debugger-mode-map "c" 'debugger-continue)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 (define-key debugger-mode-map "j" 'debugger-jump)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 (define-key debugger-mode-map "r" 'debugger-return-value)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 (define-key debugger-mode-map "u" 'debugger-frame-clear)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 (define-key debugger-mode-map "d" 'debugger-step-through)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 (define-key debugger-mode-map "l" 'debugger-list-functions)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 (define-key debugger-mode-map "h" 'describe-mode)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 (define-key debugger-mode-map "q" 'top-level)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 (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
419 (define-key debugger-mode-map " " 'next-line)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
420 (define-key debugger-mode-map "R" 'debugger-record-expression)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
421 ))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
422
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
423
21365
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
424 (defcustom debugger-record-buffer "*Debugger-record*"
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
425 "*Buffer name for expression values, for \\[debugger-record-expression]."
db005054f15d Customized.
Stephen Eglen <stephen@gnu.org>
parents: 21161
diff changeset
426 :type 'string
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21365
diff changeset
427 :group 'debugger
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21365
diff changeset
428 :version "20.3")
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
429
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
430 (defun debugger-record-expression (exp)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
431 "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
432 (interactive
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
433 (list (read-from-minibuffer
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
434 "Record Eval: "
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
435 nil
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
436 read-expression-map t
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
437 'read-expression-history)))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
438 (let* ((buffer (get-buffer-create debugger-record-buffer))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
439 (standard-output buffer))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
440 (princ (format "Debugger Eval (%s): " exp))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
441 (princ (debugger-eval-expression exp))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
442 (terpri))
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
443
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
444 (with-current-buffer (get-buffer debugger-record-buffer)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
445 (save-excursion
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
446 (forward-line -1)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
447 (message
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
448 (buffer-substring (point) (progn (end-of-line) (point)))))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 (put 'debugger-mode 'mode-class 'special)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 (defun debugger-mode ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 "Mode for backtrace buffers, selected in debugger.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 \\<debugger-mode-map>
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 A line starts with `*' if exiting that frame will call the debugger.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 Type \\[debugger-frame] or \\[debugger-frame-clear] to set or remove the `*'.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 When in debugger due to frame being exited,
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 use the \\[debugger-return-value] command to override the value
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 being returned from that frame.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 Use \\[debug-on-entry] and \\[cancel-debug-on-entry] to control
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 which functions will enter the debugger when called.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 Complete list of commands:
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 \\{debugger-mode-map}"
20403
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
467 (kill-all-local-variables)
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 (setq major-mode 'debugger-mode)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 (setq mode-name "Debugger")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 (setq truncate-lines t)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 (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
472 (use-local-map debugger-mode-map)
698119867c21 (debugger-mode-hook): New user variable.
Karl Heuer <kwzh@gnu.org>
parents: 19889
diff changeset
473 (run-hooks 'debugger-mode-hook))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 (defun debug-on-entry (function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 "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
478 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
479 This works by modifying the definition of FUNCTION,
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 which must be written in Lisp, not predefined.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 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
482 Redefining FUNCTION also cancels it."
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 (interactive "aDebug on entry (to function): ")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 (debugger-reenable)
20404
7cce7f974c78 (debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents: 20403
diff changeset
485 ;; 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
486 (if (symbolp (symbol-function function))
7cce7f974c78 (debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents: 20403
diff changeset
487 (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
488 (apply ',(symbol-function function)
7cce7f974c78 (debug-on-entry): If definition is a symbol,
Karl Heuer <kwzh@gnu.org>
parents: 20403
diff changeset
489 debug-on-entry-args))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 (if (subrp (symbol-function function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 (error "Function %s is a primitive" function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 (or (consp (symbol-function function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 (debug-convert-byte-code function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 (or (consp (symbol-function function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 (error "Definition of %s is not a list" function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 (fset function (debug-on-entry-1 function (symbol-function function) t))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 (or (memq function debug-function-list)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 (setq debug-function-list (cons function debug-function-list)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 ;;;###autoload
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 (defun cancel-debug-on-entry (&optional function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 "Undo effect of \\[debug-on-entry] on FUNCTION.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 If argument is nil or an empty string, cancel for all functions."
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
505 (interactive
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
506 (list (let ((name
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
507 (completing-read "Cancel debug on entry (to function): "
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
508 ;; Make an "alist" of the functions
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
509 ;; that now have debug on entry.
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
510 (mapcar 'list
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
511 (mapcar 'symbol-name
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
512 debug-function-list))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
513 nil t nil)))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 473
diff changeset
514 (if name (intern name)))))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 (debugger-reenable)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 (if (and function (not (string= function "")))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 (progn
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 (fset function
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 (debug-on-entry-1 function (symbol-function function) nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 (setq debug-function-list (delq function debug-function-list))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 (message "Cancelling debug-on-entry for all functions")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 (mapcar 'cancel-debug-on-entry debug-function-list)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 (defun debug-convert-byte-code (function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 (let ((defn (symbol-function function)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 (if (not (consp defn))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 ;; Assume a compiled code object.
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 (let* ((contents (append defn nil))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 (body
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 (list (list 'byte-code (nth 1 contents)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 (nth 2 contents) (nth 3 contents)))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 (if (nthcdr 5 contents)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 (setq body (cons (list 'interactive (nth 5 contents)) body)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 (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
536 ;; 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
537 ;; 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
538 ;; 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
539 (setq body (cons (documentation function) body)))
473
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 (fset function (cons 'lambda (cons (car contents) body)))))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 (defun debug-on-entry-1 (function defn flag)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 (if (subrp defn)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 (error "%s is a built-in function" function)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 (if (eq (car defn) 'macro)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 (debug-on-entry-1 function (cdr defn) flag)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 (or (eq (car defn) 'lambda)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (error "%s not user-defined Lisp function" function))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (let (tail prec)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 (if (stringp (car (nthcdr 2 defn)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 (setq tail (nthcdr 3 defn)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 prec (list (car defn) (car (cdr defn))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (car (cdr (cdr defn)))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 (setq tail (nthcdr 2 defn)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 prec (list (car defn) (car (cdr defn)))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 (if (eq flag (equal (car tail) '(debug 'debug)))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 defn
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 (if flag
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 (nconc prec (cons '(debug 'debug) tail))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (nconc prec (cdr tail))))))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 (defun debugger-list-functions ()
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 "Display a list of all the functions now set to debug on entry."
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 (interactive)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 (with-output-to-temp-buffer "*Help*"
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 (if (null debug-function-list)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 (princ "No debug-on-entry functions now\n")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 (princ "Functions set to debug on entry:\n\n")
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 (let ((list debug-function-list))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 (while list
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 (prin1 (car list))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 (terpri)
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 (setq list (cdr list))))
999d0b38694e Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 (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
575 (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
576 (save-excursion
b1455d954e44 (debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 6926
diff changeset
577 (set-buffer standard-output)
b1455d954e44 (debugger-list-functions): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 6926
diff changeset
578 (help-mode))))
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 477
diff changeset
579
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18190
diff changeset
580 (provide 'debug)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 18190
diff changeset
581
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 477
diff changeset
582 ;;; debug.el ends here