Make a start on a Profiling section in the lispref
[bpt/emacs.git] / doc / lispref / debugging.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
acaf905b 3@c Copyright (C) 1990-1994, 1998-1999, 2001-2012 Free Software Foundation, Inc.
b8d4c8d0 4@c See the file elisp.texi for copying conditions.
ecc6530d 5@node Debugging
b8d4c8d0
GM
6@chapter Debugging Lisp Programs
7
355cabc6
CY
8 There are several ways to find and investigate problems in an Emacs
9Lisp program.
b8d4c8d0
GM
10
11@itemize @bullet
12@item
355cabc6
CY
13If a problem occurs when you run the program, you can use the built-in
14Emacs Lisp debugger to suspend the Lisp evaluator, and examine and/or
15alter its internal state.
b8d4c8d0
GM
16
17@item
355cabc6 18You can use Edebug, a source-level debugger for Emacs Lisp.
b8d4c8d0
GM
19
20@item
355cabc6
CY
21If a syntactic problem is preventing Lisp from even reading the
22program, you can locate it using Lisp editing commands.
23
24@item
25You can look at the error and warning messages produced by the byte
26compiler when it compiles the program. @xref{Compiler Errors}.
27
28@item
29You can use the Testcover package to perform coverage testing on the
30program.
31
32@item
33You can use the ERT package to write regression tests for the program.
34@xref{Top,the ERT manual,, ERT, ERT: Emacs Lisp Regression Testing}.
b8d4c8d0
GM
35@end itemize
36
355cabc6
CY
37 Other useful tools for debugging input and output problems are the
38dribble file (@pxref{Terminal Input}) and the @code{open-termscript}
39function (@pxref{Terminal Output}).
40
b8d4c8d0 41@menu
355cabc6 42* Debugger:: A debugger for the Emacs Lisp evaluator.
d24880de 43* Edebug:: A source-level Emacs Lisp debugger.
b8d4c8d0
GM
44* Syntax Errors:: How to find syntax errors.
45* Test Coverage:: Ensuring you have tested all branches in your code.
5b776637 46* Profiling:: Measuring the resources that your code uses.
b8d4c8d0
GM
47@end menu
48
b8d4c8d0
GM
49@node Debugger
50@section The Lisp Debugger
51@cindex debugger for Emacs Lisp
52@cindex Lisp debugger
53@cindex break
54
55 The ordinary @dfn{Lisp debugger} provides the ability to suspend
56evaluation of a form. While evaluation is suspended (a state that is
57commonly known as a @dfn{break}), you may examine the run time stack,
58examine the values of local or global variables, or change those values.
59Since a break is a recursive edit, all the usual editing facilities of
60Emacs are available; you can even run programs that will enter the
61debugger recursively. @xref{Recursive Editing}.
62
63@menu
64* Error Debugging:: Entering the debugger when an error happens.
d24880de 65* Infinite Loops:: Stopping and debugging a program that doesn't exit.
b8d4c8d0
GM
66* Function Debugging:: Entering it when a certain function is called.
67* Explicit Debug:: Entering it at a certain point in the program.
68* Using Debugger:: What the debugger does; what you see while in it.
69* Debugger Commands:: Commands used while in the debugger.
70* Invoking the Debugger:: How to call the function @code{debug}.
71* Internals of Debugger:: Subroutines of the debugger, and global variables.
72@end menu
73
74@node Error Debugging
75@subsection Entering the Debugger on an Error
76@cindex error debugging
77@cindex debugging errors
78
79 The most important time to enter the debugger is when a Lisp error
80happens. This allows you to investigate the immediate causes of the
81error.
82
83 However, entry to the debugger is not a normal consequence of an
355cabc6
CY
84error. Many commands signal Lisp errors when invoked inappropriately,
85and during ordinary editing it would be very inconvenient to enter the
86debugger each time this happens. So if you want errors to enter the
87debugger, set the variable @code{debug-on-error} to non-@code{nil}.
88(The command @code{toggle-debug-on-error} provides an easy way to do
89this.)
b8d4c8d0
GM
90
91@defopt debug-on-error
260d5efc
CY
92This variable determines whether the debugger is called when an error
93is signaled and not handled. If @code{debug-on-error} is @code{t},
94all kinds of errors call the debugger, except those listed in
95@code{debug-ignored-errors} (see below). If it is @code{nil}, none
355cabc6
CY
96call the debugger.
97
98The value can also be a list of error conditions (@pxref{Signaling
99Errors}). Then the debugger is called only for error conditions in
100this list (except those also listed in @code{debug-ignored-errors}).
101For example, if you set @code{debug-on-error} to the list
102@code{(void-variable)}, the debugger is only called for errors about a
103variable that has no value.
b8d4c8d0 104
355cabc6
CY
105Note that @code{eval-expression-debug-on-error} overrides this
106variable in some cases; see below.
b8d4c8d0
GM
107
108When this variable is non-@code{nil}, Emacs does not create an error
109handler around process filter functions and sentinels. Therefore,
110errors in these functions also invoke the debugger. @xref{Processes}.
111@end defopt
112
113@defopt debug-ignored-errors
355cabc6
CY
114This variable specifies errors which should not enter the debugger,
115regardless of the value of @code{debug-on-error}. Its value is a list
116of error condition symbols and/or regular expressions. If the error
117has any of those condition symbols, or if the error message matches
118any of the regular expressions, then that error does not enter the
119debugger.
120
38868ad7
GM
121The normal value of this variable includes @code{user-error}, as well
122as several errors that happen often during editing but rarely result
123from bugs in Lisp programs. However, ``rarely'' is not ``never''; if
124your program fails with an error that matches this list, you may try
125changing this list to debug the error. The easiest way is usually to
126set @code{debug-ignored-errors} to @code{nil}.
b8d4c8d0
GM
127@end defopt
128
129@defopt eval-expression-debug-on-error
355cabc6
CY
130If this variable has a non-@code{nil} value (the default), running the
131command @code{eval-expression} causes @code{debug-on-error} to be
132temporarily bound to to @code{t}. @xref{Lisp Eval,, Evaluating
b8d4c8d0 133Emacs-Lisp Expressions, emacs, The GNU Emacs Manual}.
b8d4c8d0 134
355cabc6
CY
135If @code{eval-expression-debug-on-error} is @code{nil}, then the value
136of @code{debug-on-error} is not changed during @code{eval-expression}.
7aa5aad8
GM
137@end defopt
138
355cabc6
CY
139@defvar debug-on-signal
140Normally, errors caught by @code{condition-case} never invoke the
141debugger. The @code{condition-case} gets a chance to handle the error
142before the debugger gets a chance.
143
144If you change @code{debug-on-signal} to a non-@code{nil} value, the
145debugger gets the first chance at every error, regardless of the
146presence of @code{condition-case}. (To invoke the debugger, the error
147must still fulfill the criteria specified by @code{debug-on-error} and
148@code{debug-ignored-errors}.)
149
150@strong{Warning:} Setting this variable to non-@code{nil} may have
151annoying effects. Various parts of Emacs catch errors in the normal
152course of affairs, and you may not even realize that errors happen
153there. If you need to debug code wrapped in @code{condition-case},
154consider using @code{condition-case-unless-debug} (@pxref{Handling
155Errors}).
156@end defvar
157
7aa5aad8
GM
158@defopt debug-on-event
159If you set @code{debug-on-event} to a special event (@pxref{Special
160Events}), Emacs will try to enter the debugger as soon as it receives
161this event, bypassing @code{special-event-map}. At present, the only
162supported values correspond to the signals @code{SIGUSR1} and
649f602c
GM
163@code{SIGUSR2} (this is the default). This can be helpful when
164@code{inhibit-quit} is set and Emacs is not otherwise responding.
b8d4c8d0
GM
165@end defopt
166
164f28b5
GM
167@cindex message, finding what causes a particular message
168@defvar debug-on-message
169If you set @code{debug-on-message} to a regular expression,
170Emacs will enter the debugger if it displays a matching message in the
171echo area. For example, this can be useful when trying to find the
172cause of a particular message.
173@end defvar
174
b8d4c8d0
GM
175 To debug an error that happens during loading of the init
176file, use the option @samp{--debug-init}. This binds
177@code{debug-on-error} to @code{t} while loading the init file, and
178bypasses the @code{condition-case} which normally catches errors in the
179init file.
180
b8d4c8d0
GM
181@node Infinite Loops
182@subsection Debugging Infinite Loops
183@cindex infinite loops
184@cindex loops, infinite
185@cindex quitting from infinite loop
186@cindex stopping an infinite loop
187
188 When a program loops infinitely and fails to return, your first
355cabc6
CY
189problem is to stop the loop. On most operating systems, you can do
190this with @kbd{C-g}, which causes a @dfn{quit}. @xref{Quitting}.
b8d4c8d0
GM
191
192 Ordinary quitting gives no information about why the program was
193looping. To get more information, you can set the variable
355cabc6
CY
194@code{debug-on-quit} to non-@code{nil}. Once you have the debugger
195running in the middle of the infinite loop, you can proceed from the
196debugger using the stepping commands. If you step through the entire
197loop, you may get enough information to solve the problem.
b8d4c8d0 198
355cabc6
CY
199 Quitting with @kbd{C-g} is not considered an error, and
200@code{debug-on-error} has no effect on the handling of @kbd{C-g}.
201Likewise, @code{debug-on-quit} has no effect on errors.
b8d4c8d0
GM
202
203@defopt debug-on-quit
355cabc6
CY
204This variable determines whether the debugger is called when
205@code{quit} is signaled and not handled. If @code{debug-on-quit} is
206non-@code{nil}, then the debugger is called whenever you quit (that
207is, type @kbd{C-g}). If @code{debug-on-quit} is @code{nil} (the
208default), then the debugger is not called when you quit.
b8d4c8d0
GM
209@end defopt
210
211@node Function Debugging
212@subsection Entering the Debugger on a Function Call
213@cindex function call debugging
214@cindex debugging specific functions
215
216 To investigate a problem that happens in the middle of a program, one
217useful technique is to enter the debugger whenever a certain function is
218called. You can do this to the function in which the problem occurs,
219and then step through the function, or you can do this to a function
220called shortly before the problem, step quickly over the call to that
221function, and then step through its caller.
222
223@deffn Command debug-on-entry function-name
224This function requests @var{function-name} to invoke the debugger each
225time it is called. It works by inserting the form
226@code{(implement-debug-on-entry)} into the function definition as the
227first form.
228
229Any function or macro defined as Lisp code may be set to break on
230entry, regardless of whether it is interpreted code or compiled code.
231If the function is a command, it will enter the debugger when called
232from Lisp and when called interactively (after the reading of the
233arguments). You can also set debug-on-entry for primitive functions
234(i.e., those written in C) this way, but it only takes effect when the
235primitive is called from Lisp code. Debug-on-entry is not allowed for
236special forms.
237
238When @code{debug-on-entry} is called interactively, it prompts for
239@var{function-name} in the minibuffer. If the function is already set
240up to invoke the debugger on entry, @code{debug-on-entry} does nothing.
241@code{debug-on-entry} always returns @var{function-name}.
242
243@strong{Warning:} if you redefine a function after using
244@code{debug-on-entry} on it, the code to enter the debugger is
245discarded by the redefinition. In effect, redefining the function
246cancels the break-on-entry feature for that function.
247
248Here's an example to illustrate use of this function:
249
250@example
251@group
252(defun fact (n)
253 (if (zerop n) 1
254 (* n (fact (1- n)))))
255 @result{} fact
256@end group
257@group
258(debug-on-entry 'fact)
259 @result{} fact
260@end group
261@group
262(fact 3)
263@end group
264
265@group
266------ Buffer: *Backtrace* ------
267Debugger entered--entering a function:
268* fact(3)
269 eval((fact 3))
270 eval-last-sexp-1(nil)
271 eval-last-sexp(nil)
272 call-interactively(eval-last-sexp)
273------ Buffer: *Backtrace* ------
274@end group
275
276@group
277(symbol-function 'fact)
278 @result{} (lambda (n)
279 (debug (quote debug))
280 (if (zerop n) 1 (* n (fact (1- n)))))
281@end group
282@end example
283@end deffn
284
285@deffn Command cancel-debug-on-entry &optional function-name
286This function undoes the effect of @code{debug-on-entry} on
287@var{function-name}. When called interactively, it prompts for
288@var{function-name} in the minibuffer. If @var{function-name} is
289omitted or @code{nil}, it cancels break-on-entry for all functions.
290Calling @code{cancel-debug-on-entry} does nothing to a function which is
291not currently set up to break on entry.
292@end deffn
293
294@node Explicit Debug
295@subsection Explicit Entry to the Debugger
296
297 You can cause the debugger to be called at a certain point in your
298program by writing the expression @code{(debug)} at that point. To do
299this, visit the source file, insert the text @samp{(debug)} at the
300proper place, and type @kbd{C-M-x} (@code{eval-defun}, a Lisp mode key
301binding). @strong{Warning:} if you do this for temporary debugging
302purposes, be sure to undo this insertion before you save the file!
303
304 The place where you insert @samp{(debug)} must be a place where an
305additional form can be evaluated and its value ignored. (If the value
306of @code{(debug)} isn't ignored, it will alter the execution of the
307program!) The most common suitable places are inside a @code{progn} or
308an implicit @code{progn} (@pxref{Sequencing}).
309
7f7e0167
LI
310 If you don't know exactly where in the source code you want to put
311the debug statement, but you want to display a backtrace when a
312certain message is displayed, you can set @code{debug-on-message} to a
313regular expression matching the desired message.
314
b8d4c8d0
GM
315@node Using Debugger
316@subsection Using the Debugger
317
318 When the debugger is entered, it displays the previously selected
2bb0eca1 319buffer in one window and a buffer named @file{*Backtrace*} in another
b8d4c8d0
GM
320window. The backtrace buffer contains one line for each level of Lisp
321function execution currently going on. At the beginning of this buffer
322is a message describing the reason that the debugger was invoked (such
323as the error message and associated data, if it was invoked due to an
324error).
325
57fc0fee 326@vindex debugger-bury-or-kill
b8d4c8d0
GM
327 The backtrace buffer is read-only and uses a special major mode,
328Debugger mode, in which letters are defined as debugger commands. The
329usual Emacs editing commands are available; thus, you can switch windows
330to examine the buffer that was being edited at the time of the error,
331switch buffers, visit files, or do any other sort of editing. However,
332the debugger is a recursive editing level (@pxref{Recursive Editing})
333and it is wise to go back to the backtrace buffer and exit the debugger
334(with the @kbd{q} command) when you are finished with it. Exiting
57fc0fee
GM
335the debugger gets out of the recursive edit and buries the backtrace
336buffer. (You can customize what the @kbd{q} command does with the
337backtrace buffer by setting the variable @code{debugger-bury-or-kill}.
338For example, set it to @code{kill} if you prefer to kill the buffer
339rather than bury it. Consult the variable's documentation for more
340possibilities.)
b8d4c8d0 341
66249842
LMI
342 When the debugger has been entered, the @code{debug-on-error}
343variable is temporarily set according to
344@code{eval-expression-debug-on-error}. If the latter variable is
345non-@code{nil}, @code{debug-on-error} will temporarily be set to
346@code{t}. This means that any further errors that occur while doing a
347debugging session will (by default) trigger another backtrace. If
1bfe3177 348this is not what you want, you can either set
66249842
LMI
349@code{eval-expression-debug-on-error} to @code{nil}, or set
350@code{debug-on-error} to @code{nil} in @code{debugger-mode-hook}.
351
b8d4c8d0
GM
352@cindex current stack frame
353 The backtrace buffer shows you the functions that are executing and
354their argument values. It also allows you to specify a stack frame by
355moving point to the line describing that frame. (A stack frame is the
356place where the Lisp interpreter records information about a particular
357invocation of a function.) The frame whose line point is on is
358considered the @dfn{current frame}. Some of the debugger commands
359operate on the current frame. If a line starts with a star, that means
360that exiting that frame will call the debugger again. This is useful
361for examining the return value of a function.
362
363 If a function name is underlined, that means the debugger knows
355cabc6
CY
364where its source code is located. You can click with the mouse on
365that name, or move to it and type @key{RET}, to visit the source code.
b8d4c8d0
GM
366
367 The debugger itself must be run byte-compiled, since it makes
368assumptions about how many stack frames are used for the debugger
369itself. These assumptions are false if the debugger is running
370interpreted.
371
372@node Debugger Commands
373@subsection Debugger Commands
374@cindex debugger command list
375
376 The debugger buffer (in Debugger mode) provides special commands in
377addition to the usual Emacs commands. The most important use of
378debugger commands is for stepping through code, so that you can see
379how control flows. The debugger can step through the control
380structures of an interpreted function, but cannot do so in a
381byte-compiled function. If you would like to step through a
382byte-compiled function, replace it with an interpreted definition of
383the same function. (To do this, visit the source for the function and
384type @kbd{C-M-x} on its definition.) You cannot use the Lisp debugger
385to step through a primitive function.
386
387 Here is a list of Debugger mode commands:
388
389@table @kbd
390@item c
faccede1
CY
391Exit the debugger and continue execution. This resumes execution of
392the program as if the debugger had never been entered (aside from any
393side-effects that you caused by changing variable values or data
394structures while inside the debugger).
b8d4c8d0
GM
395
396@item d
397Continue execution, but enter the debugger the next time any Lisp
398function is called. This allows you to step through the
399subexpressions of an expression, seeing what values the subexpressions
400compute, and what else they do.
401
402The stack frame made for the function call which enters the debugger in
403this way will be flagged automatically so that the debugger will be
404called again when the frame is exited. You can use the @kbd{u} command
405to cancel this flag.
406
407@item b
408Flag the current frame so that the debugger will be entered when the
409frame is exited. Frames flagged in this way are marked with stars
410in the backtrace buffer.
411
412@item u
413Don't enter the debugger when the current frame is exited. This
414cancels a @kbd{b} command on that frame. The visible effect is to
415remove the star from the line in the backtrace buffer.
416
417@item j
418Flag the current frame like @kbd{b}. Then continue execution like
419@kbd{c}, but temporarily disable break-on-entry for all functions that
420are set up to do so by @code{debug-on-entry}.
421
422@item e
423Read a Lisp expression in the minibuffer, evaluate it, and print the
424value in the echo area. The debugger alters certain important
425variables, and the current buffer, as part of its operation; @kbd{e}
426temporarily restores their values from outside the debugger, so you can
427examine and change them. This makes the debugger more transparent. By
428contrast, @kbd{M-:} does nothing special in the debugger; it shows you
429the variable values within the debugger.
430
431@item R
432Like @kbd{e}, but also save the result of evaluation in the
2bb0eca1 433buffer @file{*Debugger-record*}.
b8d4c8d0
GM
434
435@item q
436Terminate the program being debugged; return to top-level Emacs
437command execution.
438
439If the debugger was entered due to a @kbd{C-g} but you really want
440to quit, and not debug, use the @kbd{q} command.
441
442@item r
443Return a value from the debugger. The value is computed by reading an
444expression with the minibuffer and evaluating it.
445
446The @kbd{r} command is useful when the debugger was invoked due to exit
447from a Lisp call frame (as requested with @kbd{b} or by entering the
448frame with @kbd{d}); then the value specified in the @kbd{r} command is
449used as the value of that frame. It is also useful if you call
450@code{debug} and use its return value. Otherwise, @kbd{r} has the same
451effect as @kbd{c}, and the specified return value does not matter.
452
453You can't use @kbd{r} when the debugger was entered due to an error.
454
455@item l
456Display a list of functions that will invoke the debugger when called.
457This is a list of functions that are set to break on entry by means of
458@code{debug-on-entry}. @strong{Warning:} if you redefine such a
459function and thus cancel the effect of @code{debug-on-entry}, it may
460erroneously show up in this list.
461@end table
462
463@node Invoking the Debugger
464@subsection Invoking the Debugger
465
466 Here we describe in full detail the function @code{debug} that is used
467to invoke the debugger.
468
0b128ac4 469@deffn Command debug &rest debugger-args
b8d4c8d0 470This function enters the debugger. It switches buffers to a buffer
2bb0eca1 471named @file{*Backtrace*} (or @file{*Backtrace*<2>} if it is the second
b8d4c8d0
GM
472recursive entry to the debugger, etc.), and fills it with information
473about the stack of Lisp function calls. It then enters a recursive
474edit, showing the backtrace buffer in Debugger mode.
475
476The Debugger mode @kbd{c}, @kbd{d}, @kbd{j}, and @kbd{r} commands exit
477the recursive edit; then @code{debug} switches back to the previous
478buffer and returns to whatever called @code{debug}. This is the only
479way the function @code{debug} can return to its caller.
480
481The use of the @var{debugger-args} is that @code{debug} displays the
2bb0eca1 482rest of its arguments at the top of the @file{*Backtrace*} buffer, so
b8d4c8d0
GM
483that the user can see them. Except as described below, this is the
484@emph{only} way these arguments are used.
485
486However, certain values for first argument to @code{debug} have a
487special significance. (Normally, these values are used only by the
488internals of Emacs, and not by programmers calling @code{debug}.) Here
489is a table of these special values:
490
491@table @code
492@item lambda
493@cindex @code{lambda} in debug
494A first argument of @code{lambda} means @code{debug} was called
495because of entry to a function when @code{debug-on-next-call} was
496non-@code{nil}. The debugger displays @samp{Debugger
497entered--entering a function:} as a line of text at the top of the
498buffer.
499
500@item debug
501@code{debug} as first argument means @code{debug} was called because
502of entry to a function that was set to debug on entry. The debugger
503displays the string @samp{Debugger entered--entering a function:},
504just as in the @code{lambda} case. It also marks the stack frame for
505that function so that it will invoke the debugger when exited.
506
507@item t
508When the first argument is @code{t}, this indicates a call to
509@code{debug} due to evaluation of a function call form when
510@code{debug-on-next-call} is non-@code{nil}. The debugger displays
511@samp{Debugger entered--beginning evaluation of function call form:}
512as the top line in the buffer.
513
514@item exit
515When the first argument is @code{exit}, it indicates the exit of a
516stack frame previously marked to invoke the debugger on exit. The
517second argument given to @code{debug} in this case is the value being
518returned from the frame. The debugger displays @samp{Debugger
519entered--returning value:} in the top line of the buffer, followed by
520the value being returned.
521
522@item error
523@cindex @code{error} in debug
524When the first argument is @code{error}, the debugger indicates that
525it is being entered because an error or @code{quit} was signaled and
526not handled, by displaying @samp{Debugger entered--Lisp error:}
527followed by the error signaled and any arguments to @code{signal}.
528For example,
529
530@example
531@group
532(let ((debug-on-error t))
533 (/ 1 0))
534@end group
535
536@group
537------ Buffer: *Backtrace* ------
538Debugger entered--Lisp error: (arith-error)
539 /(1 0)
540...
541------ Buffer: *Backtrace* ------
542@end group
543@end example
544
545If an error was signaled, presumably the variable
546@code{debug-on-error} is non-@code{nil}. If @code{quit} was signaled,
547then presumably the variable @code{debug-on-quit} is non-@code{nil}.
548
549@item nil
550Use @code{nil} as the first of the @var{debugger-args} when you want
551to enter the debugger explicitly. The rest of the @var{debugger-args}
552are printed on the top line of the buffer. You can use this feature to
553display messages---for example, to remind yourself of the conditions
554under which @code{debug} is called.
555@end table
0b128ac4 556@end deffn
b8d4c8d0
GM
557
558@node Internals of Debugger
559@subsection Internals of the Debugger
560
561 This section describes functions and variables used internally by the
562debugger.
563
564@defvar debugger
565The value of this variable is the function to call to invoke the
566debugger. Its value must be a function of any number of arguments, or,
567more typically, the name of a function. This function should invoke
568some kind of debugger. The default value of the variable is
569@code{debug}.
570
571The first argument that Lisp hands to the function indicates why it
572was called. The convention for arguments is detailed in the description
573of @code{debug} (@pxref{Invoking the Debugger}).
574@end defvar
575
576@deffn Command backtrace
577@cindex run time stack
578@cindex call stack
579This function prints a trace of Lisp function calls currently active.
580This is the function used by @code{debug} to fill up the
2bb0eca1 581@file{*Backtrace*} buffer. It is written in C, since it must have access
b8d4c8d0
GM
582to the stack to determine which function calls are active. The return
583value is always @code{nil}.
584
585In the following example, a Lisp expression calls @code{backtrace}
586explicitly. This prints the backtrace to the stream
587@code{standard-output}, which, in this case, is the buffer
588@samp{backtrace-output}.
589
590Each line of the backtrace represents one function call. The line shows
591the values of the function's arguments if they are all known; if they
592are still being computed, the line says so. The arguments of special
593forms are elided.
594
595@smallexample
596@group
597(with-output-to-temp-buffer "backtrace-output"
598 (let ((var 1))
599 (save-excursion
600 (setq var (eval '(progn
601 (1+ var)
602 (list 'testing (backtrace))))))))
603
604 @result{} (testing nil)
605@end group
606
607@group
608----------- Buffer: backtrace-output ------------
609 backtrace()
610 (list ...computing arguments...)
611@end group
612 (progn ...)
613 eval((progn (1+ var) (list (quote testing) (backtrace))))
614 (setq ...)
615 (save-excursion ...)
616 (let ...)
617 (with-output-to-temp-buffer ...)
618 eval((with-output-to-temp-buffer ...))
619 eval-last-sexp-1(nil)
620@group
621 eval-last-sexp(nil)
622 call-interactively(eval-last-sexp)
623----------- Buffer: backtrace-output ------------
624@end group
625@end smallexample
626@end deffn
627
b8d4c8d0
GM
628@defvar debug-on-next-call
629@cindex @code{eval}, and debugging
630@cindex @code{apply}, and debugging
631@cindex @code{funcall}, and debugging
632If this variable is non-@code{nil}, it says to call the debugger before
633the next @code{eval}, @code{apply} or @code{funcall}. Entering the
634debugger sets @code{debug-on-next-call} to @code{nil}.
635
636The @kbd{d} command in the debugger works by setting this variable.
637@end defvar
638
639@defun backtrace-debug level flag
640This function sets the debug-on-exit flag of the stack frame @var{level}
641levels down the stack, giving it the value @var{flag}. If @var{flag} is
642non-@code{nil}, this will cause the debugger to be entered when that
643frame later exits. Even a nonlocal exit through that frame will enter
644the debugger.
645
646This function is used only by the debugger.
647@end defun
648
649@defvar command-debug-status
650This variable records the debugging status of the current interactive
651command. Each time a command is called interactively, this variable is
652bound to @code{nil}. The debugger can set this variable to leave
653information for future debugger invocations during the same command
654invocation.
655
656The advantage of using this variable rather than an ordinary global
657variable is that the data will never carry over to a subsequent command
658invocation.
659@end defvar
660
661@defun backtrace-frame frame-number
662The function @code{backtrace-frame} is intended for use in Lisp
663debuggers. It returns information about what computation is happening
664in the stack frame @var{frame-number} levels down.
665
666If that frame has not evaluated the arguments yet, or is a special
667form, the value is @code{(nil @var{function} @var{arg-forms}@dots{})}.
668
669If that frame has evaluated its arguments and called its function
670already, the return value is @code{(t @var{function}
671@var{arg-values}@dots{})}.
672
673In the return value, @var{function} is whatever was supplied as the
674@sc{car} of the evaluated list, or a @code{lambda} expression in the
675case of a macro call. If the function has a @code{&rest} argument, that
676is represented as the tail of the list @var{arg-values}.
677
678If @var{frame-number} is out of range, @code{backtrace-frame} returns
679@code{nil}.
680@end defun
681
682@include edebug.texi
683
684@node Syntax Errors
685@section Debugging Invalid Lisp Syntax
686@cindex debugging invalid Lisp syntax
687
688 The Lisp reader reports invalid syntax, but cannot say where the real
689problem is. For example, the error ``End of file during parsing'' in
690evaluating an expression indicates an excess of open parentheses (or
691square brackets). The reader detects this imbalance at the end of the
692file, but it cannot figure out where the close parenthesis should have
693been. Likewise, ``Invalid read syntax: ")"'' indicates an excess close
694parenthesis or missing open parenthesis, but does not say where the
695missing parenthesis belongs. How, then, to find what to change?
696
697 If the problem is not simply an imbalance of parentheses, a useful
698technique is to try @kbd{C-M-e} at the beginning of each defun, and see
699if it goes to the place where that defun appears to end. If it does
700not, there is a problem in that defun.
701
702@cindex unbalanced parentheses
703@cindex parenthesis mismatch, debugging
704 However, unmatched parentheses are the most common syntax errors in
705Lisp, and we can give further advice for those cases. (In addition,
706just moving point through the code with Show Paren mode enabled might
707find the mismatch.)
708
709@menu
710* Excess Open:: How to find a spurious open paren or missing close.
711* Excess Close:: How to find a spurious close paren or missing open.
712@end menu
713
714@node Excess Open
715@subsection Excess Open Parentheses
716
717 The first step is to find the defun that is unbalanced. If there is
718an excess open parenthesis, the way to do this is to go to the end of
719the file and type @kbd{C-u C-M-u}. This will move you to the
720beginning of the first defun that is unbalanced.
721
722 The next step is to determine precisely what is wrong. There is no
723way to be sure of this except by studying the program, but often the
724existing indentation is a clue to where the parentheses should have
725been. The easiest way to use this clue is to reindent with @kbd{C-M-q}
726and see what moves. @strong{But don't do this yet!} Keep reading,
727first.
728
729 Before you do this, make sure the defun has enough close parentheses.
730Otherwise, @kbd{C-M-q} will get an error, or will reindent all the rest
731of the file until the end. So move to the end of the defun and insert a
732close parenthesis there. Don't use @kbd{C-M-e} to move there, since
733that too will fail to work until the defun is balanced.
734
735 Now you can go to the beginning of the defun and type @kbd{C-M-q}.
736Usually all the lines from a certain point to the end of the function
737will shift to the right. There is probably a missing close parenthesis,
738or a superfluous open parenthesis, near that point. (However, don't
739assume this is true; study the code to make sure.) Once you have found
740the discrepancy, undo the @kbd{C-M-q} with @kbd{C-_}, since the old
741indentation is probably appropriate to the intended parentheses.
742
743 After you think you have fixed the problem, use @kbd{C-M-q} again. If
744the old indentation actually fit the intended nesting of parentheses,
745and you have put back those parentheses, @kbd{C-M-q} should not change
746anything.
747
748@node Excess Close
749@subsection Excess Close Parentheses
750
751 To deal with an excess close parenthesis, first go to the beginning
752of the file, then type @kbd{C-u -1 C-M-u} to find the end of the first
753unbalanced defun.
754
755 Then find the actual matching close parenthesis by typing @kbd{C-M-f}
756at the beginning of that defun. This will leave you somewhere short of
757the place where the defun ought to end. It is possible that you will
758find a spurious close parenthesis in that vicinity.
759
760 If you don't see a problem at that point, the next thing to do is to
761type @kbd{C-M-q} at the beginning of the defun. A range of lines will
762probably shift left; if so, the missing open parenthesis or spurious
763close parenthesis is probably near the first of those lines. (However,
764don't assume this is true; study the code to make sure.) Once you have
765found the discrepancy, undo the @kbd{C-M-q} with @kbd{C-_}, since the
766old indentation is probably appropriate to the intended parentheses.
767
768 After you think you have fixed the problem, use @kbd{C-M-q} again. If
769the old indentation actually fits the intended nesting of parentheses,
770and you have put back those parentheses, @kbd{C-M-q} should not change
771anything.
772
773@node Test Coverage
774@section Test Coverage
775@cindex coverage testing
776
777@findex testcover-start
778@findex testcover-mark-all
779@findex testcover-next-mark
780 You can do coverage testing for a file of Lisp code by loading the
781@code{testcover} library and using the command @kbd{M-x
782testcover-start @key{RET} @var{file} @key{RET}} to instrument the
783code. Then test your code by calling it one or more times. Then use
784the command @kbd{M-x testcover-mark-all} to display colored highlights
785on the code to show where coverage is insufficient. The command
786@kbd{M-x testcover-next-mark} will move point forward to the next
787highlighted spot.
788
789 Normally, a red highlight indicates the form was never completely
790evaluated; a brown highlight means it always evaluated to the same
791value (meaning there has been little testing of what is done with the
792result). However, the red highlight is skipped for forms that can't
793possibly complete their evaluation, such as @code{error}. The brown
794highlight is skipped for forms that are expected to always evaluate to
795the same value, such as @code{(setq x 14)}.
796
797 For difficult cases, you can add do-nothing macros to your code to
798give advice to the test coverage tool.
799
800@defmac 1value form
801Evaluate @var{form} and return its value, but inform coverage testing
802that @var{form}'s value should always be the same.
803@end defmac
804
805@defmac noreturn form
806Evaluate @var{form}, informing coverage testing that @var{form} should
807never return. If it ever does return, you get a run-time error.
808@end defmac
809
810 Edebug also has a coverage testing feature (@pxref{Coverage
811Testing}). These features partly duplicate each other, and it would
812be cleaner to combine them.
5b776637
GM
813
814
815@node Profiling
816@section Profiling
817@cindex profiling
818@cindex measuring resource usage
819@cindex memory usage
820
821If your program is working correctly, but you want to make it run more
822quickly or efficiently, the first thing to do is @dfn{profile} your
823code that you know how it is using resources. If you find that one
824particular function is responsible for a significant portion of the
825runtime, you can start by looking for ways to optimize that piece.
826
827Emacs has built-in support for this. To begin profiling, type
828@kbd{M-x profiler-start}. You can choose to profile by processor
829usage, memory usage, or both. After doing some work, type
830@kbd{M-x profiler-report} to display a summary buffer for each
831resource that you chose to profile. The names of the report buffers
832include the times at which the reports were generated, so you can
833generate another report later on without erasing previous results.
834When you have finished profiling, type @kbd{M-x profiler-stop} (there
835is a small overhead associated with profiling).
836
837@c FIXME
838@c Basic apperance of the report buffer:
839
840@c The following commands are available in the report buffer:
841
842@cindex @file{elp.el}
843@cindex timing programs
844The @file{elp} library offers an alternative approach. See the file
845@file{elp.el} for instructions.
846
847@cindex @file{benchmark.el}
848@cindex benchmarking
849You can check the speed of individual Emacs Lisp forms using the
850@file{benchmark} library. See the functions @code{benchmark-run} and
851@code{benchmark-run-compiled} in @file{benchmark.el}.