annotate man/building.texi @ 67313:2ae99b10dd40

* mh-comp.el (mh-forward): Went over all uses of the word "RANGE" in the docstrings and made usage consistent. Generally speaking, "messages in range" and "range of messages" is redundant and just "range" can be used in most circumstances. Also ensured that mh-interactive-range was mentioned in all interactive functions that use a range which describes the range argument for both users and programmers. * mh-e.el (mh-delete-msg-no-motion, mh-refile-msg) (mh-refile-or-write-again, mh-rescan-folder, mh-undo) (mh-visit-folder, mh-scan-folder, mh-regenerate-headers) (mh-notate-user-sequences, mh-delete-msg-from-seq, mh-catchup): Ditto. * mh-funcs.el (mh-copy-msg, mh-pack-folder, mh-pack-folder-1): Ditto. * mh-junk.el (mh-junk-blacklist, mh-junk-whitelist): Ditto. * mh-print.el (mh-ps-print-range, mh-ps-print-msg) (mh-ps-print-msg-file, mh-print-msg): Ditto. * mh-seq.el (mh-put-msg-in-seq, mh-range-to-msg-list) (mh-narrow-to-range, mh-toggle-tick): Ditto.
author Bill Wohler <wohler@newt.com>
date Sun, 04 Dec 2005 22:34:49 +0000
parents c0926bb237e2
children de2840a4a2d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1 @c This is part of the Emacs manual.
64890
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64868
diff changeset
2 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001,
3723093a21fd Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64868
diff changeset
3 @c 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
4 @c See file emacs.texi for copying conditions.
38202
9aad32f27cef Change Next pointer.
Richard M. Stallman <rms@gnu.org>
parents: 37983
diff changeset
5 @node Building, Maintaining, Programs, Top
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
6 @chapter Compiling and Testing Programs
Dave Love <fx@gnu.org>
parents:
diff changeset
7 @cindex building programs
Dave Love <fx@gnu.org>
parents:
diff changeset
8 @cindex program building
Dave Love <fx@gnu.org>
parents:
diff changeset
9 @cindex running Lisp functions
Dave Love <fx@gnu.org>
parents:
diff changeset
10
Dave Love <fx@gnu.org>
parents:
diff changeset
11 The previous chapter discusses the Emacs commands that are useful for
Dave Love <fx@gnu.org>
parents:
diff changeset
12 making changes in programs. This chapter deals with commands that assist
Dave Love <fx@gnu.org>
parents:
diff changeset
13 in the larger process of developing and maintaining programs.
Dave Love <fx@gnu.org>
parents:
diff changeset
14
Dave Love <fx@gnu.org>
parents:
diff changeset
15 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
16 * Compilation:: Compiling programs in languages other
Dave Love <fx@gnu.org>
parents:
diff changeset
17 than Lisp (C, Pascal, etc.).
Dave Love <fx@gnu.org>
parents:
diff changeset
18 * Compilation Mode:: The mode for visiting compiler errors.
Dave Love <fx@gnu.org>
parents:
diff changeset
19 * Compilation Shell:: Customizing your shell properly
Dave Love <fx@gnu.org>
parents:
diff changeset
20 for use in the compilation buffer.
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
21 * Grep Searching:: Searching with grep.
61050
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
22 * Flymake:: Finding syntax errors on the fly.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49062
diff changeset
23 * Debuggers:: Running symbolic debuggers for non-Lisp programs.
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49062
diff changeset
24 * Executing Lisp:: Various modes for editing Lisp programs,
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
25 with different facilities for running
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49062
diff changeset
26 the Lisp programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
27 * Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs.
56808
00b9078008ef (Building): Interchange nodes (for correct numbering).
Luc Teirlinck <teirllm@auburn.edu>
parents: 56007
diff changeset
28 * Eval: Lisp Eval. Executing a single Lisp expression in Emacs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
29 * Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49062
diff changeset
30 * External Lisp:: Communicating through Emacs with a separate Lisp.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
31 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
32
Dave Love <fx@gnu.org>
parents:
diff changeset
33 @node Compilation
Dave Love <fx@gnu.org>
parents:
diff changeset
34 @section Running Compilations under Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
35 @cindex inferior process
Dave Love <fx@gnu.org>
parents:
diff changeset
36 @cindex make
Dave Love <fx@gnu.org>
parents:
diff changeset
37 @cindex compilation errors
Dave Love <fx@gnu.org>
parents:
diff changeset
38 @cindex error log
Dave Love <fx@gnu.org>
parents:
diff changeset
39
Dave Love <fx@gnu.org>
parents:
diff changeset
40 Emacs can run compilers for noninteractive languages such as C and
Dave Love <fx@gnu.org>
parents:
diff changeset
41 Fortran as inferior processes, feeding the error log into an Emacs buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
42 It can also parse the error messages and show you the source lines where
Dave Love <fx@gnu.org>
parents:
diff changeset
43 compilation errors occurred.
Dave Love <fx@gnu.org>
parents:
diff changeset
44
Dave Love <fx@gnu.org>
parents:
diff changeset
45 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
46 @item M-x compile
37482
4b43d9f652aa Correct typo on pdb-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents: 37346
diff changeset
47 Run a compiler asynchronously under Emacs, with error messages going to
38461
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
48 the @samp{*compilation*} buffer.
39820
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
49 @item M-x recompile
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
50 Invoke a compiler with the same command as in the last invocation of
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
51 @kbd{M-x compile}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
52 @item M-x kill-compilation
64949
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
53 Kill the running compilation subprocess.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
54 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
55
Dave Love <fx@gnu.org>
parents:
diff changeset
56 @findex compile
Dave Love <fx@gnu.org>
parents:
diff changeset
57 To run @code{make} or another compilation command, do @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
58 compile}. This command reads a shell command line using the minibuffer,
Dave Love <fx@gnu.org>
parents:
diff changeset
59 and then executes the command in an inferior shell, putting output in
Dave Love <fx@gnu.org>
parents:
diff changeset
60 the buffer named @samp{*compilation*}. The current buffer's default
Dave Love <fx@gnu.org>
parents:
diff changeset
61 directory is used as the working directory for the execution of the
Dave Love <fx@gnu.org>
parents:
diff changeset
62 command; normally, therefore, the compilation happens in this
Dave Love <fx@gnu.org>
parents:
diff changeset
63 directory.
Dave Love <fx@gnu.org>
parents:
diff changeset
64
Dave Love <fx@gnu.org>
parents:
diff changeset
65 @vindex compile-command
66133
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
66 The default for the compilation command is normally @samp{make -k},
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
67 which is correct most of the time for nontrivial programs.
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
68 (@xref{Top,, Make, make, GNU Make Manual}.) If you have done @kbd{M-x
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
69 compile} before, the default each time is the command you used the
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
70 previous time. @code{compile} stores this command in the variable
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
71 @code{compile-command}, so setting that variable specifies the default
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
72 for the next use of @kbd{M-x compile}. If a file specifies a file
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
73 local value for @code{compile-command}, that provides the default when
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
74 you type @kbd{M-x compile} in that file's buffer. @xref{File
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
75 Variables}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
76
Dave Love <fx@gnu.org>
parents:
diff changeset
77 Starting a compilation displays the buffer @samp{*compilation*} in
60278
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
78 another window but does not select it. The buffer's mode line tells
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
79 you whether compilation is finished, with the word @samp{run},
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
80 @samp{signal} or @samp{exit} inside the parentheses. You do not have
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
81 to keep this buffer visible; compilation continues in any case. While
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
82 a compilation is going on, the string @samp{Compiling} appears in the
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
83 mode lines of all windows. When this string disappears, the
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
84 compilation is finished.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
85
Dave Love <fx@gnu.org>
parents:
diff changeset
86 If you want to watch the compilation transcript as it appears, switch
Dave Love <fx@gnu.org>
parents:
diff changeset
87 to the @samp{*compilation*} buffer and move point to the end of the
Dave Love <fx@gnu.org>
parents:
diff changeset
88 buffer. When point is at the end, new compilation output is inserted
Dave Love <fx@gnu.org>
parents:
diff changeset
89 above point, which remains at the end. If point is not at the end of
Dave Love <fx@gnu.org>
parents:
diff changeset
90 the buffer, it remains fixed while more compilation output is added at
Dave Love <fx@gnu.org>
parents:
diff changeset
91 the end of the buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
92
34935
390058c38d27 Add a cindex entry for compilation-scroll-output. Duplicate the variable's
Eli Zaretskii <eliz@gnu.org>
parents: 31027
diff changeset
93 @cindex compilation buffer, keeping current position at the end
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
94 @vindex compilation-scroll-output
Dave Love <fx@gnu.org>
parents:
diff changeset
95 If you set the variable @code{compilation-scroll-output} to a
Dave Love <fx@gnu.org>
parents:
diff changeset
96 non-@code{nil} value, then the compilation buffer always scrolls to
Dave Love <fx@gnu.org>
parents:
diff changeset
97 follow output as it comes in.
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 @findex kill-compilation
51791
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
100 When the compiler process terminates, for whatever reason, the mode
60278
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
101 line of the @samp{*compilation*} buffer changes to say @samp{exit}
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
102 (followed by the exit code, @samp{[0]} for a normal exit), or
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
103 @samp{signal} (if a signal terminated the process), instead of
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
104 @samp{run}. Starting a new compilation also kills any running
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
105 compilation, as only one can exist at any time. However, @kbd{M-x
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
106 compile} asks for confirmation before actually killing a compilation
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
107 that is running. You can also kill the compilation process with
f69c04fae9ff (Compilation): Update mode line status info.
Richard M. Stallman <rms@gnu.org>
parents: 59825
diff changeset
108 @kbd{M-x kill-compilation}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
109
39820
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
110 @findex recompile
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
111 To rerun the last compilation with the same command, type @kbd{M-x
62221
ebb9e325798e (Compilation): Clarify recompile's directory choice.
Richard M. Stallman <rms@gnu.org>
parents: 62171
diff changeset
112 recompile}. This automatically reuses the compilation command from
ebb9e325798e (Compilation): Clarify recompile's directory choice.
Richard M. Stallman <rms@gnu.org>
parents: 62171
diff changeset
113 the last invocation of @kbd{M-x compile}. It also reuses the
ebb9e325798e (Compilation): Clarify recompile's directory choice.
Richard M. Stallman <rms@gnu.org>
parents: 62171
diff changeset
114 @samp{*compilation*} buffer and starts the compilation in its default
ebb9e325798e (Compilation): Clarify recompile's directory choice.
Richard M. Stallman <rms@gnu.org>
parents: 62171
diff changeset
115 directory, which is the directory in which the previous compilation
ebb9e325798e (Compilation): Clarify recompile's directory choice.
Richard M. Stallman <rms@gnu.org>
parents: 62171
diff changeset
116 was started.
39820
f0947afcdf4c (Compilation): Document "M-x recompile".
Eli Zaretskii <eliz@gnu.org>
parents: 39287
diff changeset
117
51791
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
118 Emacs does not expect a compiler process to launch asynchronous
46362
36ac28961e4f Say that output from asynch subprocesses of a compiler may be lost.
Richard M. Stallman <rms@gnu.org>
parents: 46238
diff changeset
119 subprocesses; if it does, and they keep running after the main
51791
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
120 compiler process has terminated, Emacs may kill them or their output
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
121 may not arrive in Emacs. To avoid this problem, make the main process
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
122 wait for its subprocesses to finish. In a shell script, you can do this
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
123 using @samp{$!} and @samp{wait}, like this:
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
124
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
125 @example
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
126 (sleep 10; echo 2nd)& pid=$! # @r{Record pid of subprocess}
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
127 echo first message
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
128 wait $pid # @r{Wait for subprocess}
2488d95d6eaa (Compilation): Document what happens with asynch children of compiler process.
Richard M. Stallman <rms@gnu.org>
parents: 51296
diff changeset
129 @end example
46362
36ac28961e4f Say that output from asynch subprocesses of a compiler may be lost.
Richard M. Stallman <rms@gnu.org>
parents: 46238
diff changeset
130
57154
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
131 If the background process does not output to the compilation buffer,
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
132 so you only need to prevent it from being killed when the main
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
133 compilation process terminates, this is sufficient:
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
134
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
135 @example
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
136 nohup @var{command}; sleep 1
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
137 @end example
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
138
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
139 @vindex compilation-environment
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
140 You can control the environment passed to the compilation command
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
141 with the variable @code{compilation-environment}. Its value is a list
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
142 of environment variable settings; each element should be a string of
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
143 the form @code{"@var{envvarname}=@var{value}"}. These environment
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
144 variable settings override the usual ones.
fe97fe43464a (Compilation): Explain how to make a silent subprocess that won't be
Richard M. Stallman <rms@gnu.org>
parents: 56873
diff changeset
145
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
146 @node Compilation Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
147 @section Compilation Mode
Dave Love <fx@gnu.org>
parents:
diff changeset
148
Dave Love <fx@gnu.org>
parents:
diff changeset
149 @findex compile-goto-error
Dave Love <fx@gnu.org>
parents:
diff changeset
150 @cindex Compilation mode
Dave Love <fx@gnu.org>
parents:
diff changeset
151 @cindex mode, Compilation
Dave Love <fx@gnu.org>
parents:
diff changeset
152 The @samp{*compilation*} buffer uses a special major mode, Compilation
Dave Love <fx@gnu.org>
parents:
diff changeset
153 mode, whose main feature is to provide a convenient way to look at the
Dave Love <fx@gnu.org>
parents:
diff changeset
154 source line where the error happened.
Dave Love <fx@gnu.org>
parents:
diff changeset
155
Dave Love <fx@gnu.org>
parents:
diff changeset
156 @table @kbd
61652
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
157 @item M-g M-n
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
158 @itemx M-g n
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
159 @itemx C-x `
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
160 Visit the locus of the next compiler error message or @code{grep} match.
61652
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
161 @item M-g M-p
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
162 @itemx M-g p
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
163 Visit the locus of the previous compiler error message or @code{grep} match.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
164 @item @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
165 Visit the locus of the error message that point is on.
Dave Love <fx@gnu.org>
parents:
diff changeset
166 This command is used in the compilation buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
167 @item Mouse-2
Dave Love <fx@gnu.org>
parents:
diff changeset
168 Visit the locus of the error message that you click on.
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
169 @item M-n
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
170 Find and highlight the locus of the next error message, without
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
171 selecting the source buffer.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
172 @item M-p
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
173 Find and highlight the locus of the previous error message, without
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
174 selecting the source buffer.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
175 @item M-@}
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
176 Move point to the next error for a different file than the current
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
177 one.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
178 @item M-@{
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
179 Move point to the previous error for a different file than the current
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
180 one.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
181 @item C-c C-f
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
182 Toggle Next Error Follow minor mode, which makes cursor motion in the
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
183 compilation buffer produce automatic source display.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
184 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
185
61652
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
186 @kindex M-g M-n
91e895711c2e (Compilation Mode): Add M-g M-n and M-g M-p bindings.
Kim F. Storm <storm@cua.dk>
parents: 61050
diff changeset
187 @kindex M-g n
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
188 @kindex C-x `
Dave Love <fx@gnu.org>
parents:
diff changeset
189 @findex next-error
Dave Love <fx@gnu.org>
parents:
diff changeset
190 You can visit the source for any particular error message by moving
38461
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
191 point in the @samp{*compilation*} buffer to that error message and
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
192 typing @key{RET} (@code{compile-goto-error}). Alternatively, you can
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
193 click @kbd{Mouse-2} on the error message; you need not switch to the
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
194 @samp{*compilation*} buffer first.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
195
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
196 @vindex next-error-highlight
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
197 To parse the compiler error messages sequentially, type @kbd{C-x `}
Dave Love <fx@gnu.org>
parents:
diff changeset
198 (@code{next-error}). The character following the @kbd{C-x} is the
Dave Love <fx@gnu.org>
parents:
diff changeset
199 backquote or ``grave accent,'' not the single-quote. This command is
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
200 available in all buffers, not just in @samp{*compilation*}; it
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
201 displays the next error message at the top of one window and source
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
202 location of the error in another window. It also momentarily
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
203 highlights the relevant source line. You can change the behavior of
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
204 this highlighting with the variable @code{next-error-highlight}.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
205
Dave Love <fx@gnu.org>
parents:
diff changeset
206 The first time @kbd{C-x `} is used after the start of a compilation,
Dave Love <fx@gnu.org>
parents:
diff changeset
207 it moves to the first error's location. Subsequent uses of @kbd{C-x `}
Dave Love <fx@gnu.org>
parents:
diff changeset
208 advance down to subsequent errors. If you visit a specific error
Dave Love <fx@gnu.org>
parents:
diff changeset
209 message with @key{RET} or @kbd{Mouse-2}, subsequent @kbd{C-x `}
Dave Love <fx@gnu.org>
parents:
diff changeset
210 commands advance from there. When @kbd{C-x `} gets to the end of the
Dave Love <fx@gnu.org>
parents:
diff changeset
211 buffer and finds no more error messages to visit, it fails and signals
Dave Love <fx@gnu.org>
parents:
diff changeset
212 an Emacs error.
Dave Love <fx@gnu.org>
parents:
diff changeset
213
67041
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
214 @vindex compilation-skip-threshold
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
215 By default, @kbd{C-x `} skips less important messages. The variable
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
216 @code{compilation-skip-threshold} controls this. If its value is 2,
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
217 @kbd{C-x `} skips anything less than error, 1 skips anything less
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
218 than warning, and 0 doesn't skip any messages.
4cce2bac0f79 (Compilation Mode): Remove paragraph duplicated from the node `Compilation'.
Juri Linkov <juri@jurta.org>
parents: 66584
diff changeset
219
62384
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
220 When the left fringe is displayed, an arrow points to the
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
221 current message in the compilation buffer. The variable
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
222 @code{compilation-context-lines} controls the number of lines of
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
223 leading context in the window before the current message. If it is
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
224 @code{nil} and the left fringe is displayed, the window doesn't
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
225 scroll. If there is no left fringe, no arrow is displayed and a value
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
226 of @code{nil} means display the message at the top of the window.
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
227
66133
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
228 If you're not in the compilation buffer when you run
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
229 @code{next-error}, Emacs will look for a buffer that contains error
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
230 messages. First, it looks for one displayed in the selected frame,
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
231 then for one that previously had @code{next-error} called on it, and
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
232 then at the current buffer. Finally, Emacs looks at all the remaining
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
233 buffers. @code{next-error} signals an error if it can't find any such
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
234 buffer.
3e340cd42f9f (Compilation Mode, Compilation): Clarified.
Richard M. Stallman <rms@gnu.org>
parents: 65974
diff changeset
235
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
236 @kbd{C-u C-x `} starts scanning from the beginning of the compilation
Dave Love <fx@gnu.org>
parents:
diff changeset
237 buffer. This is one way to process the same set of errors again.
Dave Love <fx@gnu.org>
parents:
diff changeset
238
37983
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
239 @vindex compilation-error-regexp-alist
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
240 @vindex grep-regexp-alist
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
241 To parse messages from the compiler, Compilation mode uses the
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
242 variable @code{compilation-error-regexp-alist} which lists various
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
243 formats of error messages and tells Emacs how to extract the source file
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
244 and the line number from the text of a message. If your compiler isn't
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
245 supported, you can tailor Compilation mode to it by adding elements to
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
246 that list. A similar variable @code{grep-regexp-alist} tells Emacs how
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
247 to parse output of a @code{grep} command.
081777df34a7 (Compilation Mode): Document compilation-error-regexp-alist.
Eli Zaretskii <eliz@gnu.org>
parents: 37482
diff changeset
248
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
249 @findex compilation-next-error
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
250 @findex compilation-previous-error
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
251 @findex compilation-next-file
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
252 @findex compilation-previous-file
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
253 Compilation mode also redefines the keys @key{SPC} and @key{DEL} to
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
254 scroll by screenfuls, and @kbd{M-n} (@code{compilation-next-error})
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
255 and @kbd{M-p} (@code{compilation-previous-error}) to move to the next
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
256 or previous error message. You can also use @kbd{M-@{}
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
257 (@code{compilation-next-file} and @kbd{M-@}}
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
258 (@code{compilation-previous-file}) to move up or down to an error
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
259 message for a different source file.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
260
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
261 @cindex Next Error Follow mode
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
262 @findex next-error-follow-minor-mode
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
263 You can type @kbd{C-c C-f} to toggle Next Error Follow mode. In
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
264 this minor mode, ordinary cursor motion in the compilation buffer
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
265 automatically updates the source buffer. For instance, moving the
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
266 cursor to the next error message causes the location of that error to
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
267 be displayed immediately.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
268
Dave Love <fx@gnu.org>
parents:
diff changeset
269 The features of Compilation mode are also available in a minor mode
Dave Love <fx@gnu.org>
parents:
diff changeset
270 called Compilation Minor mode. This lets you parse error messages in
Dave Love <fx@gnu.org>
parents:
diff changeset
271 any buffer, not just a normal compilation output buffer. Type @kbd{M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
272 compilation-minor-mode} to enable the minor mode. This defines the keys
Dave Love <fx@gnu.org>
parents:
diff changeset
273 @key{RET} and @kbd{Mouse-2}, as in the Compilation major mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
274
Dave Love <fx@gnu.org>
parents:
diff changeset
275 Compilation minor mode works in any buffer, as long as the contents
Dave Love <fx@gnu.org>
parents:
diff changeset
276 are in a format that it understands. In an Rlogin buffer (@pxref{Remote
Dave Love <fx@gnu.org>
parents:
diff changeset
277 Host}), Compilation minor mode automatically accesses remote source
Dave Love <fx@gnu.org>
parents:
diff changeset
278 files by FTP (@pxref{File Names}).
Dave Love <fx@gnu.org>
parents:
diff changeset
279
Dave Love <fx@gnu.org>
parents:
diff changeset
280 @node Compilation Shell
Dave Love <fx@gnu.org>
parents:
diff changeset
281 @section Subshells for Compilation
Dave Love <fx@gnu.org>
parents:
diff changeset
282
Dave Love <fx@gnu.org>
parents:
diff changeset
283 Emacs uses a shell to run the compilation command, but specifies
Dave Love <fx@gnu.org>
parents:
diff changeset
284 the option for a noninteractive shell. This means, in particular, that
Dave Love <fx@gnu.org>
parents:
diff changeset
285 the shell should start with no prompt. If you find your usual shell
Dave Love <fx@gnu.org>
parents:
diff changeset
286 prompt making an unsightly appearance in the @samp{*compilation*}
Dave Love <fx@gnu.org>
parents:
diff changeset
287 buffer, it means you have made a mistake in your shell's init file by
Dave Love <fx@gnu.org>
parents:
diff changeset
288 setting the prompt unconditionally. (This init file's name may be
Dave Love <fx@gnu.org>
parents:
diff changeset
289 @file{.bashrc}, @file{.profile}, @file{.cshrc}, @file{.shrc}, or various
Dave Love <fx@gnu.org>
parents:
diff changeset
290 other things, depending on the shell you use.) The shell init file
Dave Love <fx@gnu.org>
parents:
diff changeset
291 should set the prompt only if there already is a prompt. In csh, here
Dave Love <fx@gnu.org>
parents:
diff changeset
292 is how to do it:
Dave Love <fx@gnu.org>
parents:
diff changeset
293
Dave Love <fx@gnu.org>
parents:
diff changeset
294 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
295 if ($?prompt) set prompt = @dots{}
Dave Love <fx@gnu.org>
parents:
diff changeset
296 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
297
Dave Love <fx@gnu.org>
parents:
diff changeset
298 @noindent
Dave Love <fx@gnu.org>
parents:
diff changeset
299 And here's how to do it in bash:
Dave Love <fx@gnu.org>
parents:
diff changeset
300
Dave Love <fx@gnu.org>
parents:
diff changeset
301 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
302 if [ "$@{PS1+set@}" = set ]
Dave Love <fx@gnu.org>
parents:
diff changeset
303 then PS1=@dots{}
Dave Love <fx@gnu.org>
parents:
diff changeset
304 fi
Dave Love <fx@gnu.org>
parents:
diff changeset
305 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
306
Dave Love <fx@gnu.org>
parents:
diff changeset
307 There may well be other things that your shell's init file
Dave Love <fx@gnu.org>
parents:
diff changeset
308 ought to do only for an interactive shell. You can use the same
Dave Love <fx@gnu.org>
parents:
diff changeset
309 method to conditionalize them.
Dave Love <fx@gnu.org>
parents:
diff changeset
310
Dave Love <fx@gnu.org>
parents:
diff changeset
311 The MS-DOS ``operating system'' does not support asynchronous
Dave Love <fx@gnu.org>
parents:
diff changeset
312 subprocesses; to work around this lack, @kbd{M-x compile} runs the
Dave Love <fx@gnu.org>
parents:
diff changeset
313 compilation command synchronously on MS-DOS. As a consequence, you must
Dave Love <fx@gnu.org>
parents:
diff changeset
314 wait until the command finishes before you can do anything else in
Dave Love <fx@gnu.org>
parents:
diff changeset
315 Emacs. @xref{MS-DOS}.
Dave Love <fx@gnu.org>
parents:
diff changeset
316
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
317 @node Grep Searching
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
318 @section Searching with Grep under Emacs
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
319
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
320 Just as you can run a compiler from Emacs and then visit the lines
64868
b35680d9ef84 (Compilation): Use `itemx' instead of `item'.
Juri Linkov <juri@jurta.org>
parents: 63678
diff changeset
321 with compilation errors, you can also run @code{grep} and
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
322 then visit the lines on which matches were found. This works by
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
323 treating the matches reported by @code{grep} as if they were ``errors.''
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
324
64949
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
325 @table @kbd
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
326 @item M-x grep
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
327 Run @code{grep} asynchronously under Emacs, with matching lines
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
328 listed in the buffer named @samp{*grep*}.
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
329 @item M-x grep-find
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
330 @itemx M-x find-grep
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
331 Run @code{grep} via @code{find}, with user-specified arguments, and
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
332 collect output in the buffer named @samp{*grep*}.
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
333 @item M-x kill-grep
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
334 Kill the running @code{grep} subprocess.
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
335 @end table
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
336
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
337 @findex grep
28c8ccee6671 (Compilation, Grep Searching): Move grep command
Juri Linkov <juri@jurta.org>
parents: 64890
diff changeset
338 To run @code{grep}, type @kbd{M-x grep}, then enter a command line that
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
339 specifies how to run @code{grep}. Use the same arguments you would give
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
340 @code{grep} when running it normally: a @code{grep}-style regexp
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
341 (usually in single-quotes to quote the shell's special characters)
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
342 followed by file names, which may use wildcards. If you specify a
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
343 prefix argument for @kbd{M-x grep}, it figures out the tag
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
344 (@pxref{Tags}) around point, and puts that into the default
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
345 @code{grep} command.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
346
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
347 The output from @code{grep} goes in the @samp{*grep*} buffer. You
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
348 can find the corresponding lines in the original files using @kbd{C-x
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
349 `}, @key{RET}, and so forth, just like compilation errors.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
350
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
351 Some grep programs accept a @samp{--color} option to output special
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
352 markers around matches for the purpose of highlighting. You can make
63678
e5e25d9c7335 (Grep Searching): Texinfo usage fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 63600
diff changeset
353 use of this feature by setting @code{grep-highlight-matches} to
e5e25d9c7335 (Grep Searching): Texinfo usage fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 63600
diff changeset
354 @code{t}. When displaying a match in the source buffer, the exact
e5e25d9c7335 (Grep Searching): Texinfo usage fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 63600
diff changeset
355 match will be highlighted, instead of the entire source line.
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
356
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
357 @findex grep-find
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
358 @findex find-grep
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
359 The command @kbd{M-x grep-find} (also available as @kbd{M-x
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
360 find-grep}) is similar to @kbd{M-x grep}, but it supplies a different
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
361 initial default for the command---one that runs both @code{find} and
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
362 @code{grep}, so as to search every file in a directory tree. See also
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
363 the @code{find-grep-dired} command, in @ref{Dired and Find}.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
364
61050
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
365 @node Flymake
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
366 @section Finding Syntax Errors On The Fly
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
367 @cindex checking syntax
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
368
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
369 Flymake mode is a minor mode that performs on-the-fly syntax
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
370 checking for many programming and markup languages, including C, C++,
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
371 Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
372 mode, which performs spell checking for ordinary human languages in a
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
373 similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
374 runs an appropriate syntax checking tool in the background, using a
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
375 temporary copy of the buffer. It then parses the error and warning
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
376 messages, and highlights the erroneous lines in the buffer. The
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
377 syntax checking tool used depends on the language; for example, for
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
378 C/C++ files this is usually the C compiler. Flymake can also use
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
379 build tools such as @code{make} for checking complicated projects.
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
380
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
381 To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
382 to the errors spotted by Flymake mode with @kbd{M-x
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
383 flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
384 display any error messages associated with the current line, use
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
385 @kbd{M-x flymake-display-err-menu-for-current-line}.
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
386
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
387 For more details about using Flymake, see @ref{Top, Flymake,
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
388 Flymake, flymake, The Flymake Manual}.
71da083fd001 (Flymake): New node.
Richard M. Stallman <rms@gnu.org>
parents: 60843
diff changeset
389
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
390 @node Debuggers
Dave Love <fx@gnu.org>
parents:
diff changeset
391 @section Running Debuggers Under Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
392 @cindex debuggers
Dave Love <fx@gnu.org>
parents:
diff changeset
393 @cindex GUD library
Dave Love <fx@gnu.org>
parents:
diff changeset
394 @cindex GDB
Dave Love <fx@gnu.org>
parents:
diff changeset
395 @cindex DBX
Dave Love <fx@gnu.org>
parents:
diff changeset
396 @cindex SDB
Dave Love <fx@gnu.org>
parents:
diff changeset
397 @cindex XDB
Dave Love <fx@gnu.org>
parents:
diff changeset
398 @cindex Perldb
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
399 @cindex bashdb
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
400 @cindex JDB
Dave Love <fx@gnu.org>
parents:
diff changeset
401 @cindex PDB
Dave Love <fx@gnu.org>
parents:
diff changeset
402
Dave Love <fx@gnu.org>
parents:
diff changeset
403 @c Do you believe in GUD?
Dave Love <fx@gnu.org>
parents:
diff changeset
404 The GUD (Grand Unified Debugger) library provides an interface to
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
405 various symbolic debuggers from within Emacs. We recommend the
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
406 debugger GDB, which is free software, but you can also run DBX, SDB or
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
407 XDB if you have them. GUD can also serve as an interface to Perl's
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
408 debugging mode, the Python debugger PDB, the bash debugger, and to
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
409 JDB, the Java Debugger. @xref{Debugging,, The Lisp Debugger, elisp,
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
410 the Emacs Lisp Reference Manual}, for information on debugging Emacs
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
411 Lisp programs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
412
Dave Love <fx@gnu.org>
parents:
diff changeset
413 @menu
Dave Love <fx@gnu.org>
parents:
diff changeset
414 * Starting GUD:: How to start a debugger subprocess.
Dave Love <fx@gnu.org>
parents:
diff changeset
415 * Debugger Operation:: Connection between the debugger and source buffers.
Dave Love <fx@gnu.org>
parents:
diff changeset
416 * Commands of GUD:: Key bindings for common commands.
Dave Love <fx@gnu.org>
parents:
diff changeset
417 * GUD Customization:: Defining your own commands for GUD.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
418 * GDB Graphical Interface:: An enhanced mode that uses GDB features to
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
419 implement a graphical debugging environment through
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
420 Emacs.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
421 @end menu
Dave Love <fx@gnu.org>
parents:
diff changeset
422
Dave Love <fx@gnu.org>
parents:
diff changeset
423 @node Starting GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
424 @subsection Starting GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
425
Dave Love <fx@gnu.org>
parents:
diff changeset
426 There are several commands for starting a debugger, each corresponding
Dave Love <fx@gnu.org>
parents:
diff changeset
427 to a particular debugger program.
Dave Love <fx@gnu.org>
parents:
diff changeset
428
Dave Love <fx@gnu.org>
parents:
diff changeset
429 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
430 @item M-x gdb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
431 @findex gdb
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
432 Run GDB as a subprocess of Emacs. By default, this operates in
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
433 graphical mode; @xref{GDB Graphical Interface}. Graphical mode
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
434 does not support any other debuggers.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
435
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
436 @item M-x dbx @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
437 @findex dbx
38490
1518ad710658 Fix last changes.
Eli Zaretskii <eliz@gnu.org>
parents: 38461
diff changeset
438 Similar, but run DBX instead of GDB.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
439
Dave Love <fx@gnu.org>
parents:
diff changeset
440 @item M-x xdb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
441 @findex xdb
Dave Love <fx@gnu.org>
parents:
diff changeset
442 @vindex gud-xdb-directories
38490
1518ad710658 Fix last changes.
Eli Zaretskii <eliz@gnu.org>
parents: 38461
diff changeset
443 Similar, but run XDB instead of GDB. Use the variable
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
444 @code{gud-xdb-directories} to specify directories to search for source
Dave Love <fx@gnu.org>
parents:
diff changeset
445 files.
Dave Love <fx@gnu.org>
parents:
diff changeset
446
Dave Love <fx@gnu.org>
parents:
diff changeset
447 @item M-x sdb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
448 @findex sdb
38490
1518ad710658 Fix last changes.
Eli Zaretskii <eliz@gnu.org>
parents: 38461
diff changeset
449 Similar, but run SDB instead of GDB.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
450
Dave Love <fx@gnu.org>
parents:
diff changeset
451 Some versions of SDB do not mention source file names in their
Dave Love <fx@gnu.org>
parents:
diff changeset
452 messages. When you use them, you need to have a valid tags table
Dave Love <fx@gnu.org>
parents:
diff changeset
453 (@pxref{Tags}) in order for GUD to find functions in the source code.
Dave Love <fx@gnu.org>
parents:
diff changeset
454 If you have not visited a tags table or the tags table doesn't list one
Dave Love <fx@gnu.org>
parents:
diff changeset
455 of the functions, you get a message saying @samp{The sdb support
Dave Love <fx@gnu.org>
parents:
diff changeset
456 requires a valid tags table to work}. If this happens, generate a valid
Dave Love <fx@gnu.org>
parents:
diff changeset
457 tags table in the working directory and try again.
Dave Love <fx@gnu.org>
parents:
diff changeset
458
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
459 @item M-x bashdb @key{RET} @var{file} @key{RET}
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
460 @findex bashdb
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
461 Run the bash debugger to debug @var{file}, a shell script.
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
462
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
463 @item M-x perldb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
464 @findex perldb
Dave Love <fx@gnu.org>
parents:
diff changeset
465 Run the Perl interpreter in debug mode to debug @var{file}, a Perl program.
Dave Love <fx@gnu.org>
parents:
diff changeset
466
Dave Love <fx@gnu.org>
parents:
diff changeset
467 @item M-x jdb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
468 @findex jdb
Dave Love <fx@gnu.org>
parents:
diff changeset
469 Run the Java debugger to debug @var{file}.
Dave Love <fx@gnu.org>
parents:
diff changeset
470
Dave Love <fx@gnu.org>
parents:
diff changeset
471 @item M-x pdb @key{RET} @var{file} @key{RET}
Dave Love <fx@gnu.org>
parents:
diff changeset
472 @findex pdb
Dave Love <fx@gnu.org>
parents:
diff changeset
473 Run the Python debugger to debug @var{file}.
Dave Love <fx@gnu.org>
parents:
diff changeset
474 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
475
Dave Love <fx@gnu.org>
parents:
diff changeset
476 Each of these commands takes one argument: a command line to invoke
Dave Love <fx@gnu.org>
parents:
diff changeset
477 the debugger. In the simplest case, specify just the name of the
Dave Love <fx@gnu.org>
parents:
diff changeset
478 executable file you want to debug. You may also use options that the
Dave Love <fx@gnu.org>
parents:
diff changeset
479 debugger supports. However, shell wildcards and variables are not
Dave Love <fx@gnu.org>
parents:
diff changeset
480 allowed. GUD assumes that the first argument not starting with a
Dave Love <fx@gnu.org>
parents:
diff changeset
481 @samp{-} is the executable file name.
Dave Love <fx@gnu.org>
parents:
diff changeset
482
Dave Love <fx@gnu.org>
parents:
diff changeset
483 @node Debugger Operation
Dave Love <fx@gnu.org>
parents:
diff changeset
484 @subsection Debugger Operation
Dave Love <fx@gnu.org>
parents:
diff changeset
485
42904
0e87fd2f82b4 (Debugger Operation): Add index entries for fringe usage.
Eli Zaretskii <eliz@gnu.org>
parents: 39820
diff changeset
486 @cindex fringes, and current execution line in GUD
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
487 When you run a debugger with GUD, the debugger uses an Emacs buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
488 for its ordinary input and output. This is called the GUD buffer. The
Dave Love <fx@gnu.org>
parents:
diff changeset
489 debugger displays the source files of the program by visiting them in
Dave Love <fx@gnu.org>
parents:
diff changeset
490 Emacs buffers. An arrow (@samp{=>}) in one of these buffers indicates
42913
9e0a0017c70d Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 42904
diff changeset
491 the current execution line.@footnote{Under a window system, the arrow
9e0a0017c70d Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 42904
diff changeset
492 appears in the left fringe of the Emacs window.} Moving point in this
9e0a0017c70d Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 42904
diff changeset
493 buffer does not move the arrow.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
494
Dave Love <fx@gnu.org>
parents:
diff changeset
495 You can start editing these source files at any time in the buffers
38461
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
496 that display them. The arrow is not part of the file's
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
497 text; it appears only on the screen. If you do modify a source file,
Dave Love <fx@gnu.org>
parents:
diff changeset
498 keep in mind that inserting or deleting lines will throw off the arrow's
Dave Love <fx@gnu.org>
parents:
diff changeset
499 positioning; GUD has no way of figuring out which line corresponded
Dave Love <fx@gnu.org>
parents:
diff changeset
500 before your changes to the line number in a debugger message. Also,
Dave Love <fx@gnu.org>
parents:
diff changeset
501 you'll typically have to recompile and restart the program for your
Dave Love <fx@gnu.org>
parents:
diff changeset
502 changes to be reflected in the debugger's tables.
Dave Love <fx@gnu.org>
parents:
diff changeset
503
Dave Love <fx@gnu.org>
parents:
diff changeset
504 If you wish, you can control your debugger process entirely through the
Dave Love <fx@gnu.org>
parents:
diff changeset
505 debugger buffer, which uses a variant of Shell mode. All the usual
Dave Love <fx@gnu.org>
parents:
diff changeset
506 commands for your debugger are available, and you can use the Shell mode
Dave Love <fx@gnu.org>
parents:
diff changeset
507 history commands to repeat them. @xref{Shell Mode}.
Dave Love <fx@gnu.org>
parents:
diff changeset
508
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
509 @cindex tooltips with GUD
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
510 @vindex tooltip-gud-modes
62171
83608278e922 (Debugger Operation): Describe gud-tooltip-echo-area.
Nick Roberts <nickrob@snap.net.nz>
parents: 62143
diff changeset
511 @vindex gud-tooltip-mode
83608278e922 (Debugger Operation): Describe gud-tooltip-echo-area.
Nick Roberts <nickrob@snap.net.nz>
parents: 62143
diff changeset
512 @vindex gud-tooltip-echo-area
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
513 The Tooltip facility (@pxref{Tooltips}) provides support for GUD@.
62143
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
514 You activate this feature by turning on the minor mode
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
515 @code{gud-tooltip-mode}. Then you can display a variable's value in a
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
516 tooltip simply by pointing at it with the mouse. In graphical mode,
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
517 with a C program, you can also display the @code{#define} directive
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
518 associated with an identifier when the program is not executing. This
892a16c3b886 (Debugger Operation): Update to reflect changes
Nick Roberts <nickrob@snap.net.nz>
parents: 61951
diff changeset
519 operates in the GUD buffer and in source buffers with major modes in
62171
83608278e922 (Debugger Operation): Describe gud-tooltip-echo-area.
Nick Roberts <nickrob@snap.net.nz>
parents: 62143
diff changeset
520 the list @code{gud-tooltip-modes}. If the variable
62384
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
521 @code{gud-tooltip-echo-area} is non-@code{nil} then the variable's
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
522 value is displayed in the echo area.
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
523
62405
39bedd779f48 (Debugger Operation): Mention GUD tooltips are disabled with GDB in text
Nick Roberts <nickrob@snap.net.nz>
parents: 62384
diff changeset
524 With GDB in text command mode (@pxref{GDB Graphical Interface}),
39bedd779f48 (Debugger Operation): Mention GUD tooltips are disabled with GDB in text
Nick Roberts <nickrob@snap.net.nz>
parents: 62384
diff changeset
525 it is possible that use of GUD tooltips can cause a function to be
39bedd779f48 (Debugger Operation): Mention GUD tooltips are disabled with GDB in text
Nick Roberts <nickrob@snap.net.nz>
parents: 62384
diff changeset
526 called with harmful side-effects. In this case, Emacs disables
62666
51db72745571 (Debugger Operation): Simplify last sentence.
Nick Roberts <nickrob@snap.net.nz>
parents: 62405
diff changeset
527 them.
62405
39bedd779f48 (Debugger Operation): Mention GUD tooltips are disabled with GDB in text
Nick Roberts <nickrob@snap.net.nz>
parents: 62384
diff changeset
528
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
529 @node Commands of GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
530 @subsection Commands of GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
531
Dave Love <fx@gnu.org>
parents:
diff changeset
532 The GUD interaction buffer uses a variant of Shell mode, so the
Dave Love <fx@gnu.org>
parents:
diff changeset
533 commands of Shell mode are available (@pxref{Shell Mode}). GUD mode
Dave Love <fx@gnu.org>
parents:
diff changeset
534 also provides commands for setting and clearing breakpoints, for
Dave Love <fx@gnu.org>
parents:
diff changeset
535 selecting stack frames, and for stepping through the program. These
Dave Love <fx@gnu.org>
parents:
diff changeset
536 commands are available both in the GUD buffer and globally, but with
62384
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
537 different key bindings. It also has its own tool bar from which you
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
538 can invoke the more common commands by clicking on the appropriate
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
539 icon. This is particularly useful for repetitive commands like
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
540 gud-next and gud-step and allows the user to hide the GUD buffer.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
541
38461
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
542 The breakpoint commands are normally used in source file buffers,
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
543 because that is the easiest way to specify where to set or clear the
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
544 breakpoint. Here's the global command to set a breakpoint:
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
545
Dave Love <fx@gnu.org>
parents:
diff changeset
546 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
547 @item C-x @key{SPC}
Dave Love <fx@gnu.org>
parents:
diff changeset
548 @kindex C-x SPC
Dave Love <fx@gnu.org>
parents:
diff changeset
549 Set a breakpoint on the source line that point is on.
Dave Love <fx@gnu.org>
parents:
diff changeset
550 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
551
Dave Love <fx@gnu.org>
parents:
diff changeset
552 @kindex C-x C-a @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
553 Here are the other special commands provided by GUD. The keys
Dave Love <fx@gnu.org>
parents:
diff changeset
554 starting with @kbd{C-c} are available only in the GUD interaction
Dave Love <fx@gnu.org>
parents:
diff changeset
555 buffer. The key bindings that start with @kbd{C-x C-a} are available in
Dave Love <fx@gnu.org>
parents:
diff changeset
556 the GUD interaction buffer and also in source files.
Dave Love <fx@gnu.org>
parents:
diff changeset
557
Dave Love <fx@gnu.org>
parents:
diff changeset
558 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
559 @item C-c C-l
Dave Love <fx@gnu.org>
parents:
diff changeset
560 @kindex C-c C-l @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
561 @itemx C-x C-a C-l
Dave Love <fx@gnu.org>
parents:
diff changeset
562 @findex gud-refresh
Dave Love <fx@gnu.org>
parents:
diff changeset
563 Display in another window the last line referred to in the GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
564 buffer (that is, the line indicated in the last location message).
Dave Love <fx@gnu.org>
parents:
diff changeset
565 This runs the command @code{gud-refresh}.
Dave Love <fx@gnu.org>
parents:
diff changeset
566
Dave Love <fx@gnu.org>
parents:
diff changeset
567 @item C-c C-s
Dave Love <fx@gnu.org>
parents:
diff changeset
568 @kindex C-c C-s @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
569 @itemx C-x C-a C-s
Dave Love <fx@gnu.org>
parents:
diff changeset
570 @findex gud-step
Dave Love <fx@gnu.org>
parents:
diff changeset
571 Execute a single line of code (@code{gud-step}). If the line contains
Dave Love <fx@gnu.org>
parents:
diff changeset
572 a function call, execution stops after entering the called function.
Dave Love <fx@gnu.org>
parents:
diff changeset
573
Dave Love <fx@gnu.org>
parents:
diff changeset
574 @item C-c C-n
Dave Love <fx@gnu.org>
parents:
diff changeset
575 @kindex C-c C-n @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
576 @itemx C-x C-a C-n
Dave Love <fx@gnu.org>
parents:
diff changeset
577 @findex gud-next
Dave Love <fx@gnu.org>
parents:
diff changeset
578 Execute a single line of code, stepping across entire function calls
Dave Love <fx@gnu.org>
parents:
diff changeset
579 at full speed (@code{gud-next}).
Dave Love <fx@gnu.org>
parents:
diff changeset
580
Dave Love <fx@gnu.org>
parents:
diff changeset
581 @item C-c C-i
Dave Love <fx@gnu.org>
parents:
diff changeset
582 @kindex C-c C-i @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
583 @itemx C-x C-a C-i
Dave Love <fx@gnu.org>
parents:
diff changeset
584 @findex gud-stepi
Dave Love <fx@gnu.org>
parents:
diff changeset
585 Execute a single machine instruction (@code{gud-stepi}).
Dave Love <fx@gnu.org>
parents:
diff changeset
586
Dave Love <fx@gnu.org>
parents:
diff changeset
587 @need 3000
Dave Love <fx@gnu.org>
parents:
diff changeset
588 @item C-c C-r
Dave Love <fx@gnu.org>
parents:
diff changeset
589 @kindex C-c C-r @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
590 @itemx C-x C-a C-r
Dave Love <fx@gnu.org>
parents:
diff changeset
591 @findex gud-cont
Dave Love <fx@gnu.org>
parents:
diff changeset
592 Continue execution without specifying any stopping point. The program
Dave Love <fx@gnu.org>
parents:
diff changeset
593 will run until it hits a breakpoint, terminates, or gets a signal that
Dave Love <fx@gnu.org>
parents:
diff changeset
594 the debugger is checking for (@code{gud-cont}).
Dave Love <fx@gnu.org>
parents:
diff changeset
595
Dave Love <fx@gnu.org>
parents:
diff changeset
596 @need 1000
Dave Love <fx@gnu.org>
parents:
diff changeset
597 @item C-c C-d
Dave Love <fx@gnu.org>
parents:
diff changeset
598 @kindex C-c C-d @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
599 @itemx C-x C-a C-d
Dave Love <fx@gnu.org>
parents:
diff changeset
600 @findex gud-remove
Dave Love <fx@gnu.org>
parents:
diff changeset
601 Delete the breakpoint(s) on the current source line, if any
Dave Love <fx@gnu.org>
parents:
diff changeset
602 (@code{gud-remove}). If you use this command in the GUD interaction
Dave Love <fx@gnu.org>
parents:
diff changeset
603 buffer, it applies to the line where the program last stopped.
Dave Love <fx@gnu.org>
parents:
diff changeset
604
Dave Love <fx@gnu.org>
parents:
diff changeset
605 @item C-c C-t
Dave Love <fx@gnu.org>
parents:
diff changeset
606 @kindex C-c C-t @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
607 @itemx C-x C-a C-t
Dave Love <fx@gnu.org>
parents:
diff changeset
608 @findex gud-tbreak
Dave Love <fx@gnu.org>
parents:
diff changeset
609 Set a temporary breakpoint on the current source line, if any.
Dave Love <fx@gnu.org>
parents:
diff changeset
610 If you use this command in the GUD interaction buffer,
Dave Love <fx@gnu.org>
parents:
diff changeset
611 it applies to the line where the program last stopped.
Dave Love <fx@gnu.org>
parents:
diff changeset
612 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
613
Dave Love <fx@gnu.org>
parents:
diff changeset
614 The above commands are common to all supported debuggers. If you are
Dave Love <fx@gnu.org>
parents:
diff changeset
615 using GDB or (some versions of) DBX, these additional commands are available:
Dave Love <fx@gnu.org>
parents:
diff changeset
616
Dave Love <fx@gnu.org>
parents:
diff changeset
617 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
618 @item C-c <
Dave Love <fx@gnu.org>
parents:
diff changeset
619 @kindex C-c < @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
620 @itemx C-x C-a <
Dave Love <fx@gnu.org>
parents:
diff changeset
621 @findex gud-up
Dave Love <fx@gnu.org>
parents:
diff changeset
622 Select the next enclosing stack frame (@code{gud-up}). This is
Dave Love <fx@gnu.org>
parents:
diff changeset
623 equivalent to the @samp{up} command.
Dave Love <fx@gnu.org>
parents:
diff changeset
624
Dave Love <fx@gnu.org>
parents:
diff changeset
625 @item C-c >
Dave Love <fx@gnu.org>
parents:
diff changeset
626 @kindex C-c > @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
627 @itemx C-x C-a >
Dave Love <fx@gnu.org>
parents:
diff changeset
628 @findex gud-down
Dave Love <fx@gnu.org>
parents:
diff changeset
629 Select the next inner stack frame (@code{gud-down}). This is
Dave Love <fx@gnu.org>
parents:
diff changeset
630 equivalent to the @samp{down} command.
Dave Love <fx@gnu.org>
parents:
diff changeset
631 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
632
Dave Love <fx@gnu.org>
parents:
diff changeset
633 If you are using GDB, these additional key bindings are available:
Dave Love <fx@gnu.org>
parents:
diff changeset
634
Dave Love <fx@gnu.org>
parents:
diff changeset
635 @table @kbd
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
636 @item C-c C-r
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
637 @kindex C-c C-r @r{(GUD)}
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
638 @itemx C-x C-a C-r
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
639 @findex gud-run
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
640 Start execution of the program (@code{gud-run}).
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
641
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
642 @item C-c C-u
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
643 @kindex C-c C-u @r{(GUD)}
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
644 @itemx C-x C-a C-u
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
645 @findex gud-until
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
646 Continue execution to the current line. The program will run until
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
647 it hits a breakpoint, terminates, gets a signal that the debugger is
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
648 checking for, or reaches the line on which the cursor currently sits
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
649 (@code{gud-until}).
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
650
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
651 @item @key{TAB}
Dave Love <fx@gnu.org>
parents:
diff changeset
652 @kindex TAB @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
653 @findex gud-gdb-complete-command
Dave Love <fx@gnu.org>
parents:
diff changeset
654 With GDB, complete a symbol name (@code{gud-gdb-complete-command}).
Dave Love <fx@gnu.org>
parents:
diff changeset
655 This key is available only in the GUD interaction buffer, and requires
Dave Love <fx@gnu.org>
parents:
diff changeset
656 GDB versions 4.13 and later.
Dave Love <fx@gnu.org>
parents:
diff changeset
657
Dave Love <fx@gnu.org>
parents:
diff changeset
658 @item C-c C-f
Dave Love <fx@gnu.org>
parents:
diff changeset
659 @kindex C-c C-f @r{(GUD)}
Dave Love <fx@gnu.org>
parents:
diff changeset
660 @itemx C-x C-a C-f
Dave Love <fx@gnu.org>
parents:
diff changeset
661 @findex gud-finish
Dave Love <fx@gnu.org>
parents:
diff changeset
662 Run the program until the selected stack frame returns (or until it
Dave Love <fx@gnu.org>
parents:
diff changeset
663 stops for some other reason).
43137
bc055bf06a94 (Commands of GUD): Add gud-jump.
Richard M. Stallman <rms@gnu.org>
parents: 42913
diff changeset
664
46238
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
665 @item C-x C-a C-j
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
666 @kindex C-x C-a C-j @r{(GUD)}
43137
bc055bf06a94 (Commands of GUD): Add gud-jump.
Richard M. Stallman <rms@gnu.org>
parents: 42913
diff changeset
667 @findex gud-jump
46238
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
668 Only useful in a source buffer, (@code{gud-jump}) transfers the
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
669 program's execution point to the current line. In other words, the
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
670 next line that the program executes will be the one where you gave the
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
671 command. If the new execution line is in a different function from
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
672 the previously one, GDB prompts for confirmation since the results may
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
673 be bizarre. See the GDB manual entry regarding @code{jump} for
f5ac68c7cc15 Clarify gud-jump description.
Richard M. Stallman <rms@gnu.org>
parents: 44116
diff changeset
674 details.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
675 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
676
Dave Love <fx@gnu.org>
parents:
diff changeset
677 These commands interpret a numeric argument as a repeat count, when
Dave Love <fx@gnu.org>
parents:
diff changeset
678 that makes sense.
Dave Love <fx@gnu.org>
parents:
diff changeset
679
Dave Love <fx@gnu.org>
parents:
diff changeset
680 Because @key{TAB} serves as a completion command, you can't use it to
Dave Love <fx@gnu.org>
parents:
diff changeset
681 enter a tab as input to the program you are debugging with GDB.
Dave Love <fx@gnu.org>
parents:
diff changeset
682 Instead, type @kbd{C-q @key{TAB}} to enter a tab.
Dave Love <fx@gnu.org>
parents:
diff changeset
683
Dave Love <fx@gnu.org>
parents:
diff changeset
684 @node GUD Customization
Dave Love <fx@gnu.org>
parents:
diff changeset
685 @subsection GUD Customization
Dave Love <fx@gnu.org>
parents:
diff changeset
686
Dave Love <fx@gnu.org>
parents:
diff changeset
687 @vindex gdb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
688 @vindex dbx-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
689 @vindex sdb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
690 @vindex xdb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
691 @vindex perldb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
692 @vindex pdb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
693 @vindex jdb-mode-hook
Dave Love <fx@gnu.org>
parents:
diff changeset
694 On startup, GUD runs one of the following hooks: @code{gdb-mode-hook},
Dave Love <fx@gnu.org>
parents:
diff changeset
695 if you are using GDB; @code{dbx-mode-hook}, if you are using DBX;
Dave Love <fx@gnu.org>
parents:
diff changeset
696 @code{sdb-mode-hook}, if you are using SDB; @code{xdb-mode-hook}, if you
Dave Love <fx@gnu.org>
parents:
diff changeset
697 are using XDB; @code{perldb-mode-hook}, for Perl debugging mode;
37482
4b43d9f652aa Correct typo on pdb-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents: 37346
diff changeset
698 @code{pdb-mode-hook}, for PDB; @code{jdb-mode-hook}, for JDB. You can
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
699 use these hooks to define custom key bindings for the debugger
Dave Love <fx@gnu.org>
parents:
diff changeset
700 interaction buffer. @xref{Hooks}.
Dave Love <fx@gnu.org>
parents:
diff changeset
701
Dave Love <fx@gnu.org>
parents:
diff changeset
702 Here is a convenient way to define a command that sends a particular
Dave Love <fx@gnu.org>
parents:
diff changeset
703 command string to the debugger, and set up a key binding for it in the
Dave Love <fx@gnu.org>
parents:
diff changeset
704 debugger interaction buffer:
Dave Love <fx@gnu.org>
parents:
diff changeset
705
Dave Love <fx@gnu.org>
parents:
diff changeset
706 @findex gud-def
Dave Love <fx@gnu.org>
parents:
diff changeset
707 @example
Dave Love <fx@gnu.org>
parents:
diff changeset
708 (gud-def @var{function} @var{cmdstring} @var{binding} @var{docstring})
Dave Love <fx@gnu.org>
parents:
diff changeset
709 @end example
Dave Love <fx@gnu.org>
parents:
diff changeset
710
Dave Love <fx@gnu.org>
parents:
diff changeset
711 This defines a command named @var{function} which sends
Dave Love <fx@gnu.org>
parents:
diff changeset
712 @var{cmdstring} to the debugger process, and gives it the documentation
38743
daea04400144 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 38741
diff changeset
713 string @var{docstring}. You can then use the command @var{function} in any
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
714 buffer. If @var{binding} is non-@code{nil}, @code{gud-def} also binds
Dave Love <fx@gnu.org>
parents:
diff changeset
715 the command to @kbd{C-c @var{binding}} in the GUD buffer's mode and to
Dave Love <fx@gnu.org>
parents:
diff changeset
716 @kbd{C-x C-a @var{binding}} generally.
Dave Love <fx@gnu.org>
parents:
diff changeset
717
Dave Love <fx@gnu.org>
parents:
diff changeset
718 The command string @var{cmdstring} may contain certain
Dave Love <fx@gnu.org>
parents:
diff changeset
719 @samp{%}-sequences that stand for data to be filled in at the time
Dave Love <fx@gnu.org>
parents:
diff changeset
720 @var{function} is called:
Dave Love <fx@gnu.org>
parents:
diff changeset
721
Dave Love <fx@gnu.org>
parents:
diff changeset
722 @table @samp
Dave Love <fx@gnu.org>
parents:
diff changeset
723 @item %f
Dave Love <fx@gnu.org>
parents:
diff changeset
724 The name of the current source file. If the current buffer is the GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
725 buffer, then the ``current source file'' is the file that the program
Dave Love <fx@gnu.org>
parents:
diff changeset
726 stopped in.
Dave Love <fx@gnu.org>
parents:
diff changeset
727 @c This said, ``the name of the file the program counter was in at the last breakpoint.''
Dave Love <fx@gnu.org>
parents:
diff changeset
728 @c But I suspect it is really the last stop file.
Dave Love <fx@gnu.org>
parents:
diff changeset
729
Dave Love <fx@gnu.org>
parents:
diff changeset
730 @item %l
Dave Love <fx@gnu.org>
parents:
diff changeset
731 The number of the current source line. If the current buffer is the GUD
Dave Love <fx@gnu.org>
parents:
diff changeset
732 buffer, then the ``current source line'' is the line that the program
Dave Love <fx@gnu.org>
parents:
diff changeset
733 stopped in.
Dave Love <fx@gnu.org>
parents:
diff changeset
734
Dave Love <fx@gnu.org>
parents:
diff changeset
735 @item %e
Dave Love <fx@gnu.org>
parents:
diff changeset
736 The text of the C lvalue or function-call expression at or adjacent to point.
Dave Love <fx@gnu.org>
parents:
diff changeset
737
Dave Love <fx@gnu.org>
parents:
diff changeset
738 @item %a
Dave Love <fx@gnu.org>
parents:
diff changeset
739 The text of the hexadecimal address at or adjacent to point.
Dave Love <fx@gnu.org>
parents:
diff changeset
740
Dave Love <fx@gnu.org>
parents:
diff changeset
741 @item %p
Dave Love <fx@gnu.org>
parents:
diff changeset
742 The numeric argument of the called function, as a decimal number. If
Dave Love <fx@gnu.org>
parents:
diff changeset
743 the command is used without a numeric argument, @samp{%p} stands for the
Dave Love <fx@gnu.org>
parents:
diff changeset
744 empty string.
Dave Love <fx@gnu.org>
parents:
diff changeset
745
Dave Love <fx@gnu.org>
parents:
diff changeset
746 If you don't use @samp{%p} in the command string, the command you define
Dave Love <fx@gnu.org>
parents:
diff changeset
747 ignores any numeric argument.
Dave Love <fx@gnu.org>
parents:
diff changeset
748 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
749
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
750 @node GDB Graphical Interface
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
751 @subsection GDB Graphical Interface
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
752
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
753 @findex gdb-mouse-set-clear-breakpoint
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
754 @findex gdb-mouse-toggle-breakpoint
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
755 By default, the command @code{gdb} starts GDB using a graphical
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
756 interface where you view and control the program's data using Emacs
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
757 windows. You can still interact with GDB through the GUD buffer, but
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
758 the point of this mode is that you can do it through menus and clicks,
66421
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
759 without needing to know GDB commands. For example, you can click
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
760 @kbd{Mouse-1} in the fringe or display margin of a source buffer to
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
761 set a breakpoint there and, on a graphical display, a red bullet will
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
762 appear. If a breakpoint already exists on that line, this action will
66567
1b800330fe1f (GDB Graphical Interface): Don't reference
Nick Roberts <nickrob@snap.net.nz>
parents: 66421
diff changeset
763 remove it. You can also enable or disable a breakpoint by clicking
1b800330fe1f (GDB Graphical Interface): Don't reference
Nick Roberts <nickrob@snap.net.nz>
parents: 66421
diff changeset
764 @kbd{Mouse-3} on the bullet. If you drag the debugger arrow in the
1b800330fe1f (GDB Graphical Interface): Don't reference
Nick Roberts <nickrob@snap.net.nz>
parents: 66421
diff changeset
765 fringe with @kbd{Mouse-1}, execution will continue to the line where
1b800330fe1f (GDB Graphical Interface): Don't reference
Nick Roberts <nickrob@snap.net.nz>
parents: 66421
diff changeset
766 you release the button, provided it is still in the same frame
66421
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
767 (@code{gdb-mouse-until}). Alternatively, you can click @kbd{Mouse-2}
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
768 at some point in the fringe of this buffer and execution will advance
c5bb9ba4c102 (GDB Graphical Interface): Describe gdb-mouse-until.
Nick Roberts <nickrob@snap.net.nz>
parents: 66166
diff changeset
769 to there.
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
770
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
771 @vindex gud-gdb-command-name
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
772 @findex gdba
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
773 You can also run GDB in text command mode, which creates a buffer
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
774 for input and output to GDB. To do this, set
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
775 @code{gud-gdb-command-name} to @code{"gdb --fullname"} or edit the
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
776 startup command in the minibuffer to say that. You need to do use
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
777 text command mode to run multiple debugging sessions within one Emacs
63600
c8b57e4594b8 Fix spellings.
Juanma Barranquero <lekktu@gmail.com>
parents: 62828
diff changeset
778 session. If you have customized @code{gud-gdb-command-name} in that
60440
c82b8f53ded0 (Starting GUD): Don't explain text vs graphical GDB here.
Richard M. Stallman <rms@gnu.org>
parents: 60278
diff changeset
779 way, then you can use @kbd{M-x gdba} to invoke GDB in graphical mode.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
780
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
781 @menu
65022
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
782 * GDB User Interface Layout:: Control the number of displayed buffers.
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
783 * Breakpoints Buffer:: A breakpoint control panel.
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
784 * Stack Buffer:: Select a frame from the call stack.
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
785 * Watch Expressions:: Monitor variable values in the speedbar.
65024
5668cf670dde (GDB Graphical Interface): Improve filling of menu item.
Luc Teirlinck <teirllm@auburn.edu>
parents: 65022
diff changeset
786 * Other GDB User Interface Buffers:: Input/output, locals, registers,
5668cf670dde (GDB Graphical Interface): Improve filling of menu item.
Luc Teirlinck <teirllm@auburn.edu>
parents: 65022
diff changeset
787 assembler, threads and memory buffers.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
788 @end menu
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
789
65022
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
790 @node GDB User Interface Layout
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
791 @subsubsection GDB User Interface Layout
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
792 @cindex GDB User Interface layout
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
793
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
794 @findex gdb-many-windows
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
795 @vindex gdb-many-windows
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
796
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
797 If the variable @code{gdb-many-windows} is @code{nil} (the default
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
798 value) then gdb just pops up the GUD buffer unless the variable
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
799 @code{gdb-show-main} is non-@code{nil}. In this case it starts with
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
800 two windows: one displaying the GUD buffer and the other with the
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
801 source file with the main routine of the inferior.
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
802
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
803 If @code{gdb-many-windows} is non-@code{nil}, regardless of the value of
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
804 @code{gdb-show-main}, the layout below will appear unless
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
805 @code{gdb-use-inferior-io-buffer} is @code{nil}. In this case the
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
806 source buffer occupies the full width of the frame.
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
807
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
808 @example
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
809 +--------------------------------+--------------------------------+
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
810 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
811 | GUD buffer (I/O of GDB) | Locals buffer |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
812 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
813 |--------------------------------+--------------------------------+
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
814 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
815 | Source buffer | I/O buffer (of inferior) |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
816 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
817 |--------------------------------+--------------------------------+
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
818 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
819 | Stack buffer | Breakpoints buffer |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
820 | | |
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
821 +--------------------------------+--------------------------------+
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
822 @end example
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
823
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
824 To toggle this layout, do @kbd{M-x gdb-many-windows}.
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
825
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
826 @findex gdb-restore-windows
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
827 If you change the window layout, for example, while editing and
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
828 re-compiling your program, then you can restore it with the command
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
829 @code{gdb-restore-windows}.
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
830
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
831 You may also choose which additional buffers you want to display,
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
832 either in the same frame or a different one. Select them from
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
833 @samp{GUD->GDB-windows} or @samp{GUD->GDB-Frames} sub-menu
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
834 respectively. If the menu-bar is unavailable, type @code{M-x
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
835 gdb-display-@var{buffertype}-buffer} or @code{M-x
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
836 gdb-frame-@var{buffertype}-buffer} respectively, where
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
837 @var{buffertype} is the relevant buffer type e.g breakpoints.
67231
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
838 Most of these buffers are read-only and be killed by simply
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
839 pressing @kbd{q} in them.
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
840
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
841 When you finish debugging then kill the GUD buffer with @kbd{C-x k},
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
842 which will also kill all the buffers associated with the session.
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
843 However you need not do this if, after editing and re-compiling your
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
844 source code within Emacs, you wish continue debugging. When you
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
845 restart execution, GDB will automatically find your new executable.
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
846 Keeping the GUD buffer has the advantage of keeping the shell history
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
847 as well as GDB's breakpoints. You need to check, however, that the
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
848 breakpoints in the recently edited code are still where you want them.
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
849
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
850 @node Breakpoints Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
851 @subsubsection Breakpoints Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
852
56808
00b9078008ef (Building): Interchange nodes (for correct numbering).
Luc Teirlinck <teirllm@auburn.edu>
parents: 56007
diff changeset
853 The breakpoints buffer shows the existing breakpoints and watchpoints
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
854 (@pxref{Breakpoints,,, gdb, The GNU debugger}). It has three special
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
855 commands:
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
856
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
857 @table @kbd
56808
00b9078008ef (Building): Interchange nodes (for correct numbering).
Luc Teirlinck <teirllm@auburn.edu>
parents: 56007
diff changeset
858 @item @key{SPC}
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
859 @kindex SPC @r{(GDB breakpoints buffer)}
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
860 @findex gdb-toggle-breakpoint
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
861 Enable/disable the breakpoint at the current line
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
862 (@code{gdb-toggle-breakpoint}). On a graphical display, this changes
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
863 the color of a bullet in the margin of the source buffer at the
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
864 relevant line. This is red when the breakpoint is enabled and grey
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
865 when it is disabled. Text-only terminals correspondingly display
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
866 a @samp{B} or @samp{b}.
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
867
67231
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
868 @item D
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
869 @kindex D @r{(GDB breakpoints buffer)}
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
870 @findex gdb-delete-breakpoint
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
871 Delete the breakpoint at the current line (@code{gdb-delete-breakpoint}).
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
872
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
873 @item @key{RET}
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
874 @kindex RET @r{(GDB breakpoints buffer)}
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
875 @findex gdb-goto-breakpoint
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
876 Display the file in the source buffer at the breakpoint specified at
60843
4e549a9044e1 (Stack Buffer): Mention reverse contrast for
Nick Roberts <nickrob@snap.net.nz>
parents: 60789
diff changeset
877 the current line (@code{gdb-goto-breakpoint}). Alternatively, click
4e549a9044e1 (Stack Buffer): Mention reverse contrast for
Nick Roberts <nickrob@snap.net.nz>
parents: 60789
diff changeset
878 @kbd{Mouse-2} on the breakpoint that you wish to visit.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
879 @end table
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
880
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
881 @node Stack Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
882 @subsubsection Stack Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
883
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
884 The stack buffer displays a @dfn{call stack}, with one line for each
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
885 of the nested subroutine calls (@dfn{stack frames}) now active in the
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
886 program. @xref{Backtrace,, Backtraces, gdb, The GNU debugger}.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
887
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
888 @findex gdb-frames-select
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
889 The selected frame number is displayed in reverse contrast. Move
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
890 point to any frame in the stack and type @key{RET} to select it
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
891 (@code{gdb-frames-select}) and display the associated source in the
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
892 source buffer. Alternatively, click @kbd{Mouse-2} on a frame to
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
893 select it. If the locals buffer is displayed then its contents update
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
894 to display the variables that are local to the new frame.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
895
52907
d1707faf8297 (Watch Expressions): Update section on data display
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
896 @node Watch Expressions
d1707faf8297 (Watch Expressions): Update section on data display
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
897 @subsubsection Watch Expressions
d1707faf8297 (Watch Expressions): Update section on data display
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
898 @cindex Watching expressions in GDB
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
899
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
900 @findex gud-watch
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
901 If you want to see how a variable changes each time your program stops
52907
d1707faf8297 (Watch Expressions): Update section on data display
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
902 then place the cursor over the variable name and click on the watch
62384
035f76eff1bc Replace toolbar with "tool bar" for consistency.
Nick Roberts <nickrob@snap.net.nz>
parents: 62221
diff changeset
903 icon in the tool bar (@code{gud-watch}).
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
904
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
905 Each watch expression is displayed in the speedbar. Complex data
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
906 types, such as arrays, structures and unions are represented in a tree
67067
18cd75eca849 (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67066
diff changeset
907 format. Leaves and simple data types show the name of the expression
67231
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
908 and its value, and display the type as a tooltip. Higher levels show
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
909 the name, type and address value for pointers and just the name and
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
910 type otherwise.
67066
9a9cddf82cc4 (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67041
diff changeset
911
9a9cddf82cc4 (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67041
diff changeset
912 To expand or contract a complex data type, click @kbd{Mouse-2}
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
913 on the tag to the left of the expression.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
914
52907
d1707faf8297 (Watch Expressions): Update section on data display
Nick Roberts <nickrob@snap.net.nz>
parents: 52401
diff changeset
915 @findex gdb-var-delete
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
916 With the cursor over the root expression of a complex data type, type
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
917 @kbd{D} to delete it from the speedbar
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
918 (@code{gdb-var-delete}).
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
919
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
920 @kindex RET @r{(GDB speedbar)}
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
921 @findex gdb-edit-value
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
922 With the cursor over a simple data type or an element of a complex
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
923 data type which holds a value, type @key{RET} or click @kbd{Mouse-2} to edit
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
924 its value. A prompt for a new value appears in the mini-buffer
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
925 (@code{gdb-edit-value}).
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
926
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
927 @vindex gdb-show-changed-values
54131
6534ec3bbe32 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 53254
diff changeset
928 If you set the variable @code{gdb-show-changed-values} to
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
929 non-@code{nil} (the default value), Emacs will use
54131
6534ec3bbe32 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 53254
diff changeset
930 font-lock-warning-face to display values that have recently changed in
6534ec3bbe32 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 53254
diff changeset
931 the speedbar.
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
932
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
933 @vindex gdb-use-colon-colon-notation
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
934 If you set the variable @code{gdb-use-colon-colon-notation} to a
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
935 non-@code{nil} value then, in C, Emacs will use the
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
936 @var{function}::@var{variable} format to display variables in the
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
937 speedbar. Since this does not work for variables defined in compound
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
938 statements, the default value is @code{nil}.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
939
65022
af2cce893ff5 (GDB Graphical Interface): Use better node names.
Nick Roberts <nickrob@snap.net.nz>
parents: 64949
diff changeset
940 @node Other GDB User Interface Buffers
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
941 @subsubsection Other Buffers
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
942
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
943 @table @asis
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
944 @item Input/Output Buffer
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
945 @vindex gdb-use-inferior-io-buffer
55577
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
946 If the variable @code{gdb-use-inferior-io-buffer} is non-@code{nil},
66ec9893d229 (GDB Graphical Interface): Update and describe layout first.
Nick Roberts <nickrob@snap.net.nz>
parents: 54131
diff changeset
947 the executable program that is being debugged takes its input and
66584
9600fc8cfb65 (Other GDB User Interface Buffers): Describe
Nick Roberts <nickrob@snap.net.nz>
parents: 66567
diff changeset
948 displays its output here, otherwise it uses the GUD buffer. To toggle
9600fc8cfb65 (Other GDB User Interface Buffers): Describe
Nick Roberts <nickrob@snap.net.nz>
parents: 66567
diff changeset
949 the use of this buffer, do @kbd{M-x gdb-use-inferior-io-buffer}.
9600fc8cfb65 (Other GDB User Interface Buffers): Describe
Nick Roberts <nickrob@snap.net.nz>
parents: 66567
diff changeset
950
9600fc8cfb65 (Other GDB User Interface Buffers): Describe
Nick Roberts <nickrob@snap.net.nz>
parents: 66567
diff changeset
951 Some of the commands from shell mode are available here. @xref{Shell
9600fc8cfb65 (Other GDB User Interface Buffers): Describe
Nick Roberts <nickrob@snap.net.nz>
parents: 66567
diff changeset
952 Mode}.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
953
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
954 @item Locals Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
955 The locals buffer displays the values of local variables of the
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
956 current frame for simple data types (@pxref{Frame Info, Frame Info,
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
957 Information on a frame, gdb, The GNU debugger}).
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
958
67074
56b37a553ade (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67067
diff changeset
959 Arrays and structures display their type only. Move point to their
56b37a553ade (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67067
diff changeset
960 type description ([struct/union] or [array]) and press @key{RET}, or
56b37a553ade (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67067
diff changeset
961 alternatively click @kbd{Mouse-2} there, to examine their values.
56b37a553ade (Watch Expressions): Expand description.
Nick Roberts <nickrob@snap.net.nz>
parents: 67067
diff changeset
962 @xref{Watch Expressions}.
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
963
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
964 @item Registers Buffer
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
965 @findex toggle-gdb-all-registers
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
966 The registers buffer displays the values held by the registers
67231
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
967 (@pxref{Registers,,, gdb, The GNU debugger}). Press @key{RET} or
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
968 click @kbd{Mouse-2} on a register if you want to change its value.
c0926bb237e2 (GDB User Interface Layout): Describe how to kill associated buffers.
Nick Roberts <nickrob@snap.net.nz>
parents: 67074
diff changeset
969 Press @key{SPC} to toggle the display of floating point registers
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
970 (@code{toggle-gdb-all-registers}).
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
971
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
972 @item Assembler Buffer
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
973 The assembler buffer displays the current frame as machine code. An
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
974 overlay arrow points to the current instruction and you can set and
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
975 remove breakpoints as with the source buffer. Breakpoint icons also
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
976 appear in the fringe or margin.
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
977
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
978 @item Threads Buffer
65881
6d77eb5953d0 (GDB Graphical Interface): Add variables and
Nick Roberts <nickrob@snap.net.nz>
parents: 65024
diff changeset
979 @findex gdb-threads-select
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
980 The threads buffer displays a summary of all threads currently in your
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
981 program (@pxref{Threads, Threads, Debugging programs with multiple
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
982 threads, gdb, The GNU debugger}). Move point to any thread in the
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
983 list and press @key{RET} to select it (@code{gdb-threads-select}) and
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
984 display the associated source in the source buffer. Alternatively,
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
985 click @kbd{Mouse-2} on a thread to select it. If the locals buffer is
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
986 displayed then its contents update to display the variables that are
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
987 local to the new thread.
53254
cc4a96fa8f08 (Watch Expressions): Update.
Nick Roberts <nickrob@snap.net.nz>
parents: 52907
diff changeset
988
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
989 @item Memory Buffer
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
990 The memory buffer allows the user to examine sections of program
65974
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
991 memory (@pxref{Memory, Memory, Examining memory, gdb, The GNU
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
992 debugger}). Click @kbd{Mouse-1} on the appropriate part of the header
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
993 line to change the starting address or number of data items that the
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
994 buffer displays. Click @kbd{Mouse-3} on the header line to select the
ef546abd2887 (GDB User Interface Layout): Improve diagram.
Nick Roberts <nickrob@snap.net.nz>
parents: 65881
diff changeset
995 display format or unit size for these data items.
59825
c20149ca0bba Update documentation relating to GDB Graphical
Nick Roberts <nickrob@snap.net.nz>
parents: 59688
diff changeset
996
51296
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
997 @end table
35bdcc98e5b1 (GDB Graphical Interface): New node (rewritten somewhat by RMS).
Richard M. Stallman <rms@gnu.org>
parents: 50475
diff changeset
998
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
999 @node Executing Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1000 @section Executing Lisp Expressions
Dave Love <fx@gnu.org>
parents:
diff changeset
1001
Dave Love <fx@gnu.org>
parents:
diff changeset
1002 Emacs has several different major modes for Lisp and Scheme. They are
Dave Love <fx@gnu.org>
parents:
diff changeset
1003 the same in terms of editing commands, but differ in the commands for
Dave Love <fx@gnu.org>
parents:
diff changeset
1004 executing Lisp expressions. Each mode has its own purpose.
Dave Love <fx@gnu.org>
parents:
diff changeset
1005
Dave Love <fx@gnu.org>
parents:
diff changeset
1006 @table @asis
Dave Love <fx@gnu.org>
parents:
diff changeset
1007 @item Emacs-Lisp mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1008 The mode for editing source files of programs to run in Emacs Lisp.
Dave Love <fx@gnu.org>
parents:
diff changeset
1009 This mode defines @kbd{C-M-x} to evaluate the current defun.
Dave Love <fx@gnu.org>
parents:
diff changeset
1010 @xref{Lisp Libraries}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1011 @item Lisp Interaction mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1012 The mode for an interactive session with Emacs Lisp. It defines
Dave Love <fx@gnu.org>
parents:
diff changeset
1013 @kbd{C-j} to evaluate the sexp before point and insert its value in the
Dave Love <fx@gnu.org>
parents:
diff changeset
1014 buffer. @xref{Lisp Interaction}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1015 @item Lisp mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1016 The mode for editing source files of programs that run in Lisps other
Dave Love <fx@gnu.org>
parents:
diff changeset
1017 than Emacs Lisp. This mode defines @kbd{C-M-x} to send the current defun
Dave Love <fx@gnu.org>
parents:
diff changeset
1018 to an inferior Lisp process. @xref{External Lisp}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1019 @item Inferior Lisp mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1020 The mode for an interactive session with an inferior Lisp process.
Dave Love <fx@gnu.org>
parents:
diff changeset
1021 This mode combines the special features of Lisp mode and Shell mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1022 (@pxref{Shell Mode}).
Dave Love <fx@gnu.org>
parents:
diff changeset
1023 @item Scheme mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1024 Like Lisp mode but for Scheme programs.
Dave Love <fx@gnu.org>
parents:
diff changeset
1025 @item Inferior Scheme mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1026 The mode for an interactive session with an inferior Scheme process.
Dave Love <fx@gnu.org>
parents:
diff changeset
1027 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
1028
Dave Love <fx@gnu.org>
parents:
diff changeset
1029 Most editing commands for working with Lisp programs are in fact
Dave Love <fx@gnu.org>
parents:
diff changeset
1030 available globally. @xref{Programs}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1031
Dave Love <fx@gnu.org>
parents:
diff changeset
1032 @node Lisp Libraries
Dave Love <fx@gnu.org>
parents:
diff changeset
1033 @section Libraries of Lisp Code for Emacs
Dave Love <fx@gnu.org>
parents:
diff changeset
1034 @cindex libraries
Dave Love <fx@gnu.org>
parents:
diff changeset
1035 @cindex loading Lisp code
Dave Love <fx@gnu.org>
parents:
diff changeset
1036
Dave Love <fx@gnu.org>
parents:
diff changeset
1037 Lisp code for Emacs editing commands is stored in files whose names
Dave Love <fx@gnu.org>
parents:
diff changeset
1038 conventionally end in @file{.el}. This ending tells Emacs to edit them in
Dave Love <fx@gnu.org>
parents:
diff changeset
1039 Emacs-Lisp mode (@pxref{Executing Lisp}).
Dave Love <fx@gnu.org>
parents:
diff changeset
1040
Dave Love <fx@gnu.org>
parents:
diff changeset
1041 @findex load-file
Dave Love <fx@gnu.org>
parents:
diff changeset
1042 To execute a file of Emacs Lisp code, use @kbd{M-x load-file}. This
Dave Love <fx@gnu.org>
parents:
diff changeset
1043 command reads a file name using the minibuffer and then executes the
Dave Love <fx@gnu.org>
parents:
diff changeset
1044 contents of that file as Lisp code. It is not necessary to visit the
Dave Love <fx@gnu.org>
parents:
diff changeset
1045 file first; in any case, this command reads the file as found on disk,
Dave Love <fx@gnu.org>
parents:
diff changeset
1046 not text in an Emacs buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
1047
Dave Love <fx@gnu.org>
parents:
diff changeset
1048 @findex load
Dave Love <fx@gnu.org>
parents:
diff changeset
1049 @findex load-library
Dave Love <fx@gnu.org>
parents:
diff changeset
1050 Once a file of Lisp code is installed in the Emacs Lisp library
Dave Love <fx@gnu.org>
parents:
diff changeset
1051 directories, users can load it using @kbd{M-x load-library}. Programs can
Dave Love <fx@gnu.org>
parents:
diff changeset
1052 load it by calling @code{load-library}, or with @code{load}, a more primitive
Dave Love <fx@gnu.org>
parents:
diff changeset
1053 function that is similar but accepts some additional arguments.
Dave Love <fx@gnu.org>
parents:
diff changeset
1054
Dave Love <fx@gnu.org>
parents:
diff changeset
1055 @kbd{M-x load-library} differs from @kbd{M-x load-file} in that it
Dave Love <fx@gnu.org>
parents:
diff changeset
1056 searches a sequence of directories and tries three file names in each
Dave Love <fx@gnu.org>
parents:
diff changeset
1057 directory. Suppose your argument is @var{lib}; the three names are
Dave Love <fx@gnu.org>
parents:
diff changeset
1058 @file{@var{lib}.elc}, @file{@var{lib}.el}, and lastly just
Dave Love <fx@gnu.org>
parents:
diff changeset
1059 @file{@var{lib}}. If @file{@var{lib}.elc} exists, it is by convention
Dave Love <fx@gnu.org>
parents:
diff changeset
1060 the result of compiling @file{@var{lib}.el}; it is better to load the
Dave Love <fx@gnu.org>
parents:
diff changeset
1061 compiled file, since it will load and run faster.
Dave Love <fx@gnu.org>
parents:
diff changeset
1062
Dave Love <fx@gnu.org>
parents:
diff changeset
1063 If @code{load-library} finds that @file{@var{lib}.el} is newer than
38943
4dd9aeae2f84 Don't use "prints" except for printers.
Richard M. Stallman <rms@gnu.org>
parents: 38743
diff changeset
1064 @file{@var{lib}.elc} file, it issues a warning, because it's likely that
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1065 somebody made changes to the @file{.el} file and forgot to recompile
Dave Love <fx@gnu.org>
parents:
diff changeset
1066 it.
Dave Love <fx@gnu.org>
parents:
diff changeset
1067
Dave Love <fx@gnu.org>
parents:
diff changeset
1068 Because the argument to @code{load-library} is usually not in itself
Dave Love <fx@gnu.org>
parents:
diff changeset
1069 a valid file name, file name completion is not available. Indeed, when
Dave Love <fx@gnu.org>
parents:
diff changeset
1070 using this command, you usually do not know exactly what file name
Dave Love <fx@gnu.org>
parents:
diff changeset
1071 will be used.
Dave Love <fx@gnu.org>
parents:
diff changeset
1072
Dave Love <fx@gnu.org>
parents:
diff changeset
1073 @vindex load-path
Dave Love <fx@gnu.org>
parents:
diff changeset
1074 The sequence of directories searched by @kbd{M-x load-library} is
Dave Love <fx@gnu.org>
parents:
diff changeset
1075 specified by the variable @code{load-path}, a list of strings that are
Dave Love <fx@gnu.org>
parents:
diff changeset
1076 directory names. The default value of the list contains the directory where
Dave Love <fx@gnu.org>
parents:
diff changeset
1077 the Lisp code for Emacs itself is stored. If you have libraries of
Dave Love <fx@gnu.org>
parents:
diff changeset
1078 your own, put them in a single directory and add that directory
Dave Love <fx@gnu.org>
parents:
diff changeset
1079 to @code{load-path}. @code{nil} in this list stands for the current default
Dave Love <fx@gnu.org>
parents:
diff changeset
1080 directory, but it is probably not a good idea to put @code{nil} in the
Dave Love <fx@gnu.org>
parents:
diff changeset
1081 list. If you find yourself wishing that @code{nil} were in the list,
Dave Love <fx@gnu.org>
parents:
diff changeset
1082 most likely what you really want to do is use @kbd{M-x load-file}
Dave Love <fx@gnu.org>
parents:
diff changeset
1083 this once.
Dave Love <fx@gnu.org>
parents:
diff changeset
1084
Dave Love <fx@gnu.org>
parents:
diff changeset
1085 @cindex autoload
Dave Love <fx@gnu.org>
parents:
diff changeset
1086 Often you do not have to give any command to load a library, because
Dave Love <fx@gnu.org>
parents:
diff changeset
1087 the commands defined in the library are set up to @dfn{autoload} that
Dave Love <fx@gnu.org>
parents:
diff changeset
1088 library. Trying to run any of those commands calls @code{load} to load
Dave Love <fx@gnu.org>
parents:
diff changeset
1089 the library; this replaces the autoload definitions with the real ones
Dave Love <fx@gnu.org>
parents:
diff changeset
1090 from the library.
Dave Love <fx@gnu.org>
parents:
diff changeset
1091
Dave Love <fx@gnu.org>
parents:
diff changeset
1092 @cindex byte code
Dave Love <fx@gnu.org>
parents:
diff changeset
1093 Emacs Lisp code can be compiled into byte-code which loads faster,
Dave Love <fx@gnu.org>
parents:
diff changeset
1094 takes up less space when loaded, and executes faster. @xref{Byte
Dave Love <fx@gnu.org>
parents:
diff changeset
1095 Compilation,, Byte Compilation, elisp, the Emacs Lisp Reference Manual}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1096 By convention, the compiled code for a library goes in a separate file
Dave Love <fx@gnu.org>
parents:
diff changeset
1097 whose name consists of the library source file with @samp{c} appended.
Dave Love <fx@gnu.org>
parents:
diff changeset
1098 Thus, the compiled code for @file{foo.el} goes in @file{foo.elc}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1099 That's why @code{load-library} searches for @samp{.elc} files first.
Dave Love <fx@gnu.org>
parents:
diff changeset
1100
31027
561ef681eab5 Document load-dangerous-libraries.
Eli Zaretskii <eliz@gnu.org>
parents: 28431
diff changeset
1101 @vindex load-dangerous-libraries
561ef681eab5 Document load-dangerous-libraries.
Eli Zaretskii <eliz@gnu.org>
parents: 28431
diff changeset
1102 @cindex Lisp files byte-compiled by XEmacs
36144
22f75550e788 Rewrite discussion of load-dangerous-libraries.
Richard M. Stallman <rms@gnu.org>
parents: 34935
diff changeset
1103 By default, Emacs refuses to load compiled Lisp files which were
22f75550e788 Rewrite discussion of load-dangerous-libraries.
Richard M. Stallman <rms@gnu.org>
parents: 34935
diff changeset
1104 compiled with XEmacs, a modified versions of Emacs---they can cause
22f75550e788 Rewrite discussion of load-dangerous-libraries.
Richard M. Stallman <rms@gnu.org>
parents: 34935
diff changeset
1105 Emacs to crash. Set the variable @code{load-dangerous-libraries} to
22f75550e788 Rewrite discussion of load-dangerous-libraries.
Richard M. Stallman <rms@gnu.org>
parents: 34935
diff changeset
1106 @code{t} if you want to try loading them.
31027
561ef681eab5 Document load-dangerous-libraries.
Eli Zaretskii <eliz@gnu.org>
parents: 28431
diff changeset
1107
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1108 @node Lisp Eval
58369
a54b2a5402d6 (Lisp Eval): Delete hyphen in section name.
Richard M. Stallman <rms@gnu.org>
parents: 57348
diff changeset
1109 @section Evaluating Emacs Lisp Expressions
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1110 @cindex Emacs-Lisp mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1111 @cindex mode, Emacs-Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1112
Dave Love <fx@gnu.org>
parents:
diff changeset
1113 @findex emacs-lisp-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1114 Lisp programs intended to be run in Emacs should be edited in
Dave Love <fx@gnu.org>
parents:
diff changeset
1115 Emacs-Lisp mode; this happens automatically for file names ending in
Dave Love <fx@gnu.org>
parents:
diff changeset
1116 @file{.el}. By contrast, Lisp mode itself is used for editing Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1117 programs intended for other Lisp systems. To switch to Emacs-Lisp mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1118 explicitly, use the command @kbd{M-x emacs-lisp-mode}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1119
Dave Love <fx@gnu.org>
parents:
diff changeset
1120 For testing of Lisp programs to run in Emacs, it is often useful to
Dave Love <fx@gnu.org>
parents:
diff changeset
1121 evaluate part of the program as it is found in the Emacs buffer. For
Dave Love <fx@gnu.org>
parents:
diff changeset
1122 example, after changing the text of a Lisp function definition,
Dave Love <fx@gnu.org>
parents:
diff changeset
1123 evaluating the definition installs the change for future calls to the
Dave Love <fx@gnu.org>
parents:
diff changeset
1124 function. Evaluation of Lisp expressions is also useful in any kind of
Dave Love <fx@gnu.org>
parents:
diff changeset
1125 editing, for invoking noninteractive functions (functions that are
Dave Love <fx@gnu.org>
parents:
diff changeset
1126 not commands).
Dave Love <fx@gnu.org>
parents:
diff changeset
1127
Dave Love <fx@gnu.org>
parents:
diff changeset
1128 @table @kbd
Dave Love <fx@gnu.org>
parents:
diff changeset
1129 @item M-:
Dave Love <fx@gnu.org>
parents:
diff changeset
1130 Read a single Lisp expression in the minibuffer, evaluate it, and print
Dave Love <fx@gnu.org>
parents:
diff changeset
1131 the value in the echo area (@code{eval-expression}).
Dave Love <fx@gnu.org>
parents:
diff changeset
1132 @item C-x C-e
Dave Love <fx@gnu.org>
parents:
diff changeset
1133 Evaluate the Lisp expression before point, and print the value in the
Dave Love <fx@gnu.org>
parents:
diff changeset
1134 echo area (@code{eval-last-sexp}).
Dave Love <fx@gnu.org>
parents:
diff changeset
1135 @item C-M-x
Dave Love <fx@gnu.org>
parents:
diff changeset
1136 Evaluate the defun containing or after point, and print the value in
Dave Love <fx@gnu.org>
parents:
diff changeset
1137 the echo area (@code{eval-defun}).
Dave Love <fx@gnu.org>
parents:
diff changeset
1138 @item M-x eval-region
Dave Love <fx@gnu.org>
parents:
diff changeset
1139 Evaluate all the Lisp expressions in the region.
Dave Love <fx@gnu.org>
parents:
diff changeset
1140 @item M-x eval-current-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
1141 Evaluate all the Lisp expressions in the buffer.
Dave Love <fx@gnu.org>
parents:
diff changeset
1142 @end table
Dave Love <fx@gnu.org>
parents:
diff changeset
1143
44116
1fc0cc0bb3ab Use `colon' instead of `:' in an index only in the Info version.
Eli Zaretskii <eliz@gnu.org>
parents: 43889
diff changeset
1144 @ifinfo
43889
c5ea7e769ffd (Electric C, Lisp Eval): Avoid makeinfo warnings about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 43151
diff changeset
1145 @c This uses ``colon'' instead of a literal `:' because Info cannot
c5ea7e769ffd (Electric C, Lisp Eval): Avoid makeinfo warnings about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 43151
diff changeset
1146 @c cope with a `:' in a menu
c5ea7e769ffd (Electric C, Lisp Eval): Avoid makeinfo warnings about colons in indices.
Eli Zaretskii <eliz@gnu.org>
parents: 43151
diff changeset
1147 @kindex M-@key{colon}
44116
1fc0cc0bb3ab Use `colon' instead of `:' in an index only in the Info version.
Eli Zaretskii <eliz@gnu.org>
parents: 43889
diff changeset
1148 @end ifinfo
1fc0cc0bb3ab Use `colon' instead of `:' in an index only in the Info version.
Eli Zaretskii <eliz@gnu.org>
parents: 43889
diff changeset
1149 @ifnotinfo
1fc0cc0bb3ab Use `colon' instead of `:' in an index only in the Info version.
Eli Zaretskii <eliz@gnu.org>
parents: 43889
diff changeset
1150 @kindex M-:
1fc0cc0bb3ab Use `colon' instead of `:' in an index only in the Info version.
Eli Zaretskii <eliz@gnu.org>
parents: 43889
diff changeset
1151 @end ifnotinfo
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1152 @findex eval-expression
Dave Love <fx@gnu.org>
parents:
diff changeset
1153 @kbd{M-:} (@code{eval-expression}) is the most basic command for evaluating
Dave Love <fx@gnu.org>
parents:
diff changeset
1154 a Lisp expression interactively. It reads the expression using the
Dave Love <fx@gnu.org>
parents:
diff changeset
1155 minibuffer, so you can execute any expression on a buffer regardless of
Dave Love <fx@gnu.org>
parents:
diff changeset
1156 what the buffer contains. When the expression is evaluated, the current
Dave Love <fx@gnu.org>
parents:
diff changeset
1157 buffer is once again the buffer that was current when @kbd{M-:} was
Dave Love <fx@gnu.org>
parents:
diff changeset
1158 typed.
Dave Love <fx@gnu.org>
parents:
diff changeset
1159
Dave Love <fx@gnu.org>
parents:
diff changeset
1160 @kindex C-M-x @r{(Emacs-Lisp mode)}
Dave Love <fx@gnu.org>
parents:
diff changeset
1161 @findex eval-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
1162 In Emacs-Lisp mode, the key @kbd{C-M-x} is bound to the command
Dave Love <fx@gnu.org>
parents:
diff changeset
1163 @code{eval-defun}, which parses the defun containing or following point
Dave Love <fx@gnu.org>
parents:
diff changeset
1164 as a Lisp expression and evaluates it. The value is printed in the echo
Dave Love <fx@gnu.org>
parents:
diff changeset
1165 area. This command is convenient for installing in the Lisp environment
Dave Love <fx@gnu.org>
parents:
diff changeset
1166 changes that you have just made in the text of a function definition.
Dave Love <fx@gnu.org>
parents:
diff changeset
1167
Dave Love <fx@gnu.org>
parents:
diff changeset
1168 @kbd{C-M-x} treats @code{defvar} expressions specially. Normally,
Dave Love <fx@gnu.org>
parents:
diff changeset
1169 evaluating a @code{defvar} expression does nothing if the variable it
Dave Love <fx@gnu.org>
parents:
diff changeset
1170 defines already has a value. But @kbd{C-M-x} unconditionally resets the
Dave Love <fx@gnu.org>
parents:
diff changeset
1171 variable to the initial value specified in the @code{defvar} expression.
28431
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1172 @code{defcustom} expressions are treated similarly.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1173 This special feature is convenient for debugging Lisp programs.
56007
8446511392c6 (Lisp Eval): Add C-M-x on defface.
Juri Linkov <juri@jurta.org>
parents: 55577
diff changeset
1174 Typing @kbd{C-M-x} on a @code{defface} expression reinitializes
8446511392c6 (Lisp Eval): Add C-M-x on defface.
Juri Linkov <juri@jurta.org>
parents: 55577
diff changeset
1175 the face according to the @code{defface} specification.
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1176
Dave Love <fx@gnu.org>
parents:
diff changeset
1177 @kindex C-x C-e
Dave Love <fx@gnu.org>
parents:
diff changeset
1178 @findex eval-last-sexp
Dave Love <fx@gnu.org>
parents:
diff changeset
1179 The command @kbd{C-x C-e} (@code{eval-last-sexp}) evaluates the Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1180 expression preceding point in the buffer, and displays the value in the
Dave Love <fx@gnu.org>
parents:
diff changeset
1181 echo area. It is available in all major modes, not just Emacs-Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1182 mode. It does not treat @code{defvar} specially.
Dave Love <fx@gnu.org>
parents:
diff changeset
1183
60789
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
1184 When the result of an evaluation is an integer, you can type
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
1185 @kbd{C-x C-e} a second time to display the value of the integer result
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
1186 in additional formats (octal, hexadecimal, and character).
e1f3e09e22da (Starting GUD): Add bashdb.
Richard M. Stallman <rms@gnu.org>
parents: 60594
diff changeset
1187
62741
718dc622c12e (Lisp Eval): C-M-x with arg runs Edebug.
Richard M. Stallman <rms@gnu.org>
parents: 62666
diff changeset
1188 If @kbd{C-x C-e}, or @kbd{M-:} is given a numeric argument, it
718dc622c12e (Lisp Eval): C-M-x with arg runs Edebug.
Richard M. Stallman <rms@gnu.org>
parents: 62666
diff changeset
1189 inserts the value into the current buffer at point, rather than
718dc622c12e (Lisp Eval): C-M-x with arg runs Edebug.
Richard M. Stallman <rms@gnu.org>
parents: 62666
diff changeset
1190 displaying it in the echo area. The argument's value does not matter.
718dc622c12e (Lisp Eval): C-M-x with arg runs Edebug.
Richard M. Stallman <rms@gnu.org>
parents: 62666
diff changeset
1191 @kbd{C-M-x} with a numeric argument instruments the function
718dc622c12e (Lisp Eval): C-M-x with arg runs Edebug.
Richard M. Stallman <rms@gnu.org>
parents: 62666
diff changeset
1192 definition for Edebug (@pxref{Instrumenting, Instrumenting for Edebug,, elisp, the Emacs Lisp Reference Manual}).
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1193
Dave Love <fx@gnu.org>
parents:
diff changeset
1194 @findex eval-region
Dave Love <fx@gnu.org>
parents:
diff changeset
1195 @findex eval-current-buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
1196 The most general command for evaluating Lisp expressions from a buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
1197 is @code{eval-region}. @kbd{M-x eval-region} parses the text of the
Dave Love <fx@gnu.org>
parents:
diff changeset
1198 region as one or more Lisp expressions, evaluating them one by one.
Dave Love <fx@gnu.org>
parents:
diff changeset
1199 @kbd{M-x eval-current-buffer} is similar but evaluates the entire
Dave Love <fx@gnu.org>
parents:
diff changeset
1200 buffer. This is a reasonable way to install the contents of a file of
38461
23f63206a867 Proofreading fixes from Chris Green <chris_e_green@yahoo.com>.
Eli Zaretskii <eliz@gnu.org>
parents: 38202
diff changeset
1201 Lisp code that you are ready to test. Later, as you find bugs and
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1202 change individual functions, use @kbd{C-M-x} on each function that you
Dave Love <fx@gnu.org>
parents:
diff changeset
1203 change. This keeps the Lisp world in step with the source file.
Dave Love <fx@gnu.org>
parents:
diff changeset
1204
28431
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1205 @vindex eval-expression-print-level
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1206 @vindex eval-expression-print-length
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1207 @vindex eval-expression-debug-on-error
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1208 The customizable variables @code{eval-expression-print-level} and
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1209 @code{eval-expression-print-length} control the maximum depth and length
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1210 of lists to print in the result of the evaluation commands before
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1211 abbreviating them. @code{eval-expression-debug-on-error} controls
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1212 whether evaluation errors invoke the debugger when these commands are
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1213 used.
315d6e79ea38 Overlay arrow in margin. eval-expression variables.
Dave Love <fx@gnu.org>
parents: 27223
diff changeset
1214
25829
Dave Love <fx@gnu.org>
parents:
diff changeset
1215 @node Lisp Interaction
Dave Love <fx@gnu.org>
parents:
diff changeset
1216 @section Lisp Interaction Buffers
Dave Love <fx@gnu.org>
parents:
diff changeset
1217
Dave Love <fx@gnu.org>
parents:
diff changeset
1218 The buffer @samp{*scratch*} which is selected when Emacs starts up is
Dave Love <fx@gnu.org>
parents:
diff changeset
1219 provided for evaluating Lisp expressions interactively inside Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
1220
Dave Love <fx@gnu.org>
parents:
diff changeset
1221 The simplest way to use the @samp{*scratch*} buffer is to insert Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1222 expressions and type @kbd{C-j} after each expression. This command
Dave Love <fx@gnu.org>
parents:
diff changeset
1223 reads the Lisp expression before point, evaluates it, and inserts the
Dave Love <fx@gnu.org>
parents:
diff changeset
1224 value in printed representation before point. The result is a complete
Dave Love <fx@gnu.org>
parents:
diff changeset
1225 typescript of the expressions you have evaluated and their values.
Dave Love <fx@gnu.org>
parents:
diff changeset
1226
Dave Love <fx@gnu.org>
parents:
diff changeset
1227 The @samp{*scratch*} buffer's major mode is Lisp Interaction mode, which
Dave Love <fx@gnu.org>
parents:
diff changeset
1228 is the same as Emacs-Lisp mode except for the binding of @kbd{C-j}.
Dave Love <fx@gnu.org>
parents:
diff changeset
1229
Dave Love <fx@gnu.org>
parents:
diff changeset
1230 @findex lisp-interaction-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1231 The rationale for this feature is that Emacs must have a buffer when
Dave Love <fx@gnu.org>
parents:
diff changeset
1232 it starts up, but that buffer is not useful for editing files since a
Dave Love <fx@gnu.org>
parents:
diff changeset
1233 new buffer is made for every file that you visit. The Lisp interpreter
Dave Love <fx@gnu.org>
parents:
diff changeset
1234 typescript is the most useful thing I can think of for the initial
Dave Love <fx@gnu.org>
parents:
diff changeset
1235 buffer to do. Type @kbd{M-x lisp-interaction-mode} to put the current
Dave Love <fx@gnu.org>
parents:
diff changeset
1236 buffer in Lisp Interaction mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
1237
Dave Love <fx@gnu.org>
parents:
diff changeset
1238 @findex ielm
Dave Love <fx@gnu.org>
parents:
diff changeset
1239 An alternative way of evaluating Emacs Lisp expressions interactively
Dave Love <fx@gnu.org>
parents:
diff changeset
1240 is to use Inferior Emacs-Lisp mode, which provides an interface rather
Dave Love <fx@gnu.org>
parents:
diff changeset
1241 like Shell mode (@pxref{Shell Mode}) for evaluating Emacs Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1242 expressions. Type @kbd{M-x ielm} to create an @samp{*ielm*} buffer
Dave Love <fx@gnu.org>
parents:
diff changeset
1243 which uses this mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
1244
Dave Love <fx@gnu.org>
parents:
diff changeset
1245 @node External Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1246 @section Running an External Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1247
Dave Love <fx@gnu.org>
parents:
diff changeset
1248 Emacs has facilities for running programs in other Lisp systems. You can
Dave Love <fx@gnu.org>
parents:
diff changeset
1249 run a Lisp process as an inferior of Emacs, and pass expressions to it to
Dave Love <fx@gnu.org>
parents:
diff changeset
1250 be evaluated. You can also pass changed function definitions directly from
Dave Love <fx@gnu.org>
parents:
diff changeset
1251 the Emacs buffers in which you edit the Lisp programs to the inferior Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1252 process.
Dave Love <fx@gnu.org>
parents:
diff changeset
1253
Dave Love <fx@gnu.org>
parents:
diff changeset
1254 @findex run-lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1255 @vindex inferior-lisp-program
Dave Love <fx@gnu.org>
parents:
diff changeset
1256 @kindex C-x C-z
Dave Love <fx@gnu.org>
parents:
diff changeset
1257 To run an inferior Lisp process, type @kbd{M-x run-lisp}. This runs
Dave Love <fx@gnu.org>
parents:
diff changeset
1258 the program named @code{lisp}, the same program you would run by typing
Dave Love <fx@gnu.org>
parents:
diff changeset
1259 @code{lisp} as a shell command, with both input and output going through
Dave Love <fx@gnu.org>
parents:
diff changeset
1260 an Emacs buffer named @samp{*lisp*}. That is to say, any ``terminal
Dave Love <fx@gnu.org>
parents:
diff changeset
1261 output'' from Lisp will go into the buffer, advancing point, and any
Dave Love <fx@gnu.org>
parents:
diff changeset
1262 ``terminal input'' for Lisp comes from text in the buffer. (You can
Dave Love <fx@gnu.org>
parents:
diff changeset
1263 change the name of the Lisp executable file by setting the variable
Dave Love <fx@gnu.org>
parents:
diff changeset
1264 @code{inferior-lisp-program}.)
Dave Love <fx@gnu.org>
parents:
diff changeset
1265
Dave Love <fx@gnu.org>
parents:
diff changeset
1266 To give input to Lisp, go to the end of the buffer and type the input,
Dave Love <fx@gnu.org>
parents:
diff changeset
1267 terminated by @key{RET}. The @samp{*lisp*} buffer is in Inferior Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1268 mode, which combines the special characteristics of Lisp mode with most
Dave Love <fx@gnu.org>
parents:
diff changeset
1269 of the features of Shell mode (@pxref{Shell Mode}). The definition of
Dave Love <fx@gnu.org>
parents:
diff changeset
1270 @key{RET} to send a line to a subprocess is one of the features of Shell
Dave Love <fx@gnu.org>
parents:
diff changeset
1271 mode.
Dave Love <fx@gnu.org>
parents:
diff changeset
1272
Dave Love <fx@gnu.org>
parents:
diff changeset
1273 @findex lisp-mode
Dave Love <fx@gnu.org>
parents:
diff changeset
1274 For the source files of programs to run in external Lisps, use Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1275 mode. This mode can be selected with @kbd{M-x lisp-mode}, and is used
Dave Love <fx@gnu.org>
parents:
diff changeset
1276 automatically for files whose names end in @file{.l}, @file{.lsp}, or
Dave Love <fx@gnu.org>
parents:
diff changeset
1277 @file{.lisp}, as most Lisp systems usually expect.
Dave Love <fx@gnu.org>
parents:
diff changeset
1278
Dave Love <fx@gnu.org>
parents:
diff changeset
1279 @kindex C-M-x @r{(Lisp mode)}
Dave Love <fx@gnu.org>
parents:
diff changeset
1280 @findex lisp-eval-defun
Dave Love <fx@gnu.org>
parents:
diff changeset
1281 When you edit a function in a Lisp program you are running, the easiest
Dave Love <fx@gnu.org>
parents:
diff changeset
1282 way to send the changed definition to the inferior Lisp process is the key
Dave Love <fx@gnu.org>
parents:
diff changeset
1283 @kbd{C-M-x}. In Lisp mode, this runs the function @code{lisp-eval-defun},
Dave Love <fx@gnu.org>
parents:
diff changeset
1284 which finds the defun around or following point and sends it as input to
Dave Love <fx@gnu.org>
parents:
diff changeset
1285 the Lisp process. (Emacs can send input to any inferior process regardless
Dave Love <fx@gnu.org>
parents:
diff changeset
1286 of what buffer is current.)
Dave Love <fx@gnu.org>
parents:
diff changeset
1287
Dave Love <fx@gnu.org>
parents:
diff changeset
1288 Contrast the meanings of @kbd{C-M-x} in Lisp mode (for editing programs
Dave Love <fx@gnu.org>
parents:
diff changeset
1289 to be run in another Lisp system) and Emacs-Lisp mode (for editing Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
1290 programs to be run in Emacs): in both modes it has the effect of installing
Dave Love <fx@gnu.org>
parents:
diff changeset
1291 the function definition that point is in, but the way of doing so is
Dave Love <fx@gnu.org>
parents:
diff changeset
1292 different according to where the relevant Lisp environment is found.
Dave Love <fx@gnu.org>
parents:
diff changeset
1293 @xref{Executing Lisp}.
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51791
diff changeset
1294
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51791
diff changeset
1295 @ignore
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51791
diff changeset
1296 arch-tag: 9c3c2f71-b332-4144-8500-3ff9945a50ed
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51791
diff changeset
1297 @end ignore