home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-06-08 | 67.5 KB | 1,555 lines |
- Info file edebug, produced by Makeinfo, -*- Text -*- from input file
- edebug.texinfo.
-
- This file documents Edebug
-
- This is edition 1.2 of the Edebug User Manual for edebug Version
- 2.6,
-
- Copyright (C) 1991 Daniel LaLiberte
-
- Permission is granted to make and distribute verbatim copies of
- this manual provided the copyright notice and this permission notice
- are preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
- this manual under the conditions for verbatim copying, provided that
- the entire resulting derived work is distributed under the terms of a
- permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
- manual into another language, under the above conditions for modified
- versions, except that this permission notice may be stated in a
- translation approved by the Foundation.
-
- File: edebug, Node: Top, Next: Installation, Up: (dir)
-
- Edebug
- ******
-
- * Menu:
-
- * Installation:: Installation
- * Using Edebug:: Using Edebug
- * Evaluating defuns:: Evaluating defuns
- * Edebug Modes:: Edebug Modes
- * Miscellaneous:: Miscellaneous
- * Breakpoints:: Breakpoints
- * Views:: Views
- * Evaluation:: Evaluation
- * Printing:: Printing
- * The Outside Context:: The Outside Context
- * Macro Calls:: Macro Calls
- * Options:: Options
- * Todo List:: Todo List
- * Index:: Index
-
- Edebug is a source level debugger for GNU Emacs Lisp that provides
- the following features:
-
- * Step through the evaluation of your functions and macros, stopping
- before and after each expression, displaying the results of
- expressions.
-
- * Set conditional or unconditional breakpoints.
-
- * Go until a breakpoint is reached, or ignore breakpoints.
-
- * Trace slow or fast stopping briefly at each stop point, or each
- breakpoint.
-
- * Evaluate expressions as if outside of edebug.
-
- * Automatically reevaluate a list of expressions and display their
- results each time edebug updates the display.
-
- * Output tracing info on function enter and exit.
-
- * Catch errors normally caught by debug.
-
- * Display backtrace without edebug calls.
-
- * Interface with the `custom-print' package.
-
- It isn't necessary to read all of this document, or even most of
- it, in order to make use of edebug. You should minimally read sections
- Installation, Using Edebug, and Edebug Modes; the rest can be read as
- needed.
-
- This manual assumes you are familiar with Emacs Lisp, as described
- in the GNU Emacs Lisp Reference Manual. You might want to review the
- chapters on Evaluation and Debugging.
-
- File: edebug, Node: Installation, Next: Using Edebug, Prev: Top, Up: Top
-
- Installation
- ============
-
- Put `edebug.el' in some directory in your `load-path' and
- byte-compile it.
-
- Put the following forms in your `.emacs' file.
-
- (define-key emacs-lisp-mode-map "\C-xx" 'edebug-defun)
- (autoload 'edebug-defun "edebug")
-
- If you wish to change the default edebug global command prefix,
- include the following.
-
- (setq edebug-global-prefix "\C-xX") ; or whatever you want
-
- File: edebug, Node: Using Edebug, Next: Evaluating defuns, Prev: Installation, Up: Top
-
- Using Edebug
- ============
-
- To use edebug you must be editing an Emacs Lisp buffer using
- `emacs-lisp-mode', or its equivalent, since the Emacs Lisp syntax
- table must be present.
-
- The following commands are described in this section.
-
- `C-xx'
- (`edebug-defun') Evaluates the function or macro at or after point
- setting it up for use by edebug. Unlike `eval-defun' it always
- prints `edebug: NAME' in the minibuffer and a prefix argument has
- a different effect as described below. If a syntax error is
- found, point is left at the error and mark is set to the original
- point.
-
- `?'
- (`edebug-help') Display the help message for `edebug-mode'.
-
- `a'
- (`abort-recursive-edit') Abort the edebug recursive edit. This
- only aborts one level as opposed to all the way to the top level.
-
- `q'
- (`top-level') Exit all recursive editing levels to the top level
- command loop.
-
- `r'
- (`edebug-previous-result') Redisplay the result of the previous
- expression in the echo area.
-
- To use edebug, simply evaluate a `defun' or `defmacro' with
- `edebug-defun' (`C-xx') when the point is in or before the definition.
- The next time your function or macro is called, edebug will be
- called. From now on, discussion about using edebug with functions
- includes macros, unless otherwise specified. Like `eval-defun',
- `edebug-defun' evaluates function definitions, but adds edebug calls
- to the lambda expression.
-
- To restore a function to normal operation after the definition has
- been evaluated with `edebug-defun', simply reevaluate it with one of
- the commands that evaluate definitions (e.g., `eval-defun' (`M-C-x'),
- `eval-current-buffer', or if the buffer is unchanged, `load-library').
- However, the behavior of most of these evaluating functions can also
- be modified by edebug, as described in *Note Evaluating defuns::.
-
- Implementation note: Recall that a `defun' is the source code
- definition of a function and evaluation of a definition puts the lambda
- expression for the function in the function cell of the symbol naming
- the function. After evaluating a `defun' with `edebug-defun', the
- lambda expression stored in the function symbol's function cell
- contains a call to the function `edebug-enter' at the top level and
- individual calls to the function `edebug-before' and `edebug-after'
- for each expression that may be evaluated in the function.
-
- When you call your function explicitly or via another function,
- edebug will be called, but it may or may not stop execution depending
- on what the current edebug mode is. Some edebug modes only update the
- display to indicate the progress of the evaluation without stopping
- execution. The default initial edebug mode is `step' which does stop
- execution. The edebug modes are described in detail below (*note
- Edebug Modes::.).
-
- Each time edebug updates the display to indicate the progress of the
- evaluation, the buffer that the function is defined in is displayed
- temporarily. Also point is moved (temporarily) to the expression in
- the function about to be evaluated (or just evaluated) and an overlay
- arrow is displayed at the left end of the line containing point. If
- the point is not visible in the window, the window start is changed
- (semi-permanently!) so that point is visible, while trying to display
- as much of the following code as possible. See *Note The Outside
- Context:: for more details on how the Emacs display is affected by
- edebug.
-
- In the example below, the definition of the `fac' function has been
- evaluated with `edebug-defun' (by positioning point within the
- definition and hitting `C-xx') and the expression `(fac 3)' has been
- evaluated. The arrow on the first line indicates that edebug has been
- entered. To indicate that you are stopped before the first
- expression, the cursor would be on the first left parenthesis of that
- line.
-
- (defun fac (n)
- =>(if (< 0 n)
- (* n (fac (1- n)))
- 1))
-
- When execution is stopped, you are "in edebug" in a recursive edit
- with point in the buffer defining the function, as described above.
- This buffer, called the "edebug buffer", is made read-only and the
- `edebug-mode' minor mode is activated. Several commands are available
- in addition to the standard `emacs-lisp-mode' bindings. Try the `?'
- command (`edebug-help') for a list of edebug commands. From the
- edebug recursive edit, you are permitted to call functions that invoke
- edebug again recursively. At any time in edebug, you can quit to the
- top level with `q' (`top-level)' or abort one recursive edit level
- with `a' (`abort-recursive-edit').
-
- Places within a function that edebug may stop, called "stop points",
- are before and after expressions that are not self-evaluating, i.e.
- list forms and symbols. However, edebug does not stop before symbols
- (i.e., variables) unless `edebug-stop-before-symbols' is non-`nil',
- since it is not usually useful to do so. When stopped after an
- expression, edebug displays the result of the expression in the
- minibuffer. Use the `r' command (`edebug-previous-result') to see
- that result again. You can control the way in which expression
- results are printed by using the `custom-print' package (*note
- Printing::.).
-
- Edebug knows about all the special forms, interactive forms with
- expressions, anonymous lambda expressions, and embedded `defun' or
- `defmacro' calls. It cannot know what a macro will do with the
- arguments of a macro call so you must tell it; *note Macro Calls::. for
- the details. You can use the same mechanism to tell edebug that some
- function arguments should be functions.
-
- Continuing the example of the `fac' function, the user may step
- through the execution of the function (with SPC) stopping in edebug at
- the stop points which are marked with a period:
-
- (defun fac (n)
- =>.(if .(< 0 n.).
- .(* n. .(fac (1- n.).).).
- 1).)
-
- Whenever a function evaluated with `edebug-defun' is active, the
- Emacs debugger named by the variable `debugger' is set to
- `edebug-debug', so it is not necessary to set it yourself. (Currently
- there is no option to turn off this feature.) If an error occurs and
- `debug-on-error' is non-`nil', edebug will display the error and move
- point to the last known stop point. This applies to quit signals too,
- if `debug-on-quit' is non-`nil'. But in any case, if no function that
- was evaluated with `edebug-defun' is currently active, `debug' is run
- normally. Note that you can also get a full backtrace inside of
- edebug (see *Note Miscellaneous::).
-
- File: edebug, Node: Evaluating defuns, Next: Edebug Modes, Prev: Using Edebug, Up: Top
-
- Evaluating defuns
- =================
-
- There are a couple other ways to evaluate a `defun' for edebug
- besides calling `edebug-defun' directly. The variable
- `edebug-all-defuns' affects the behavior of several commands defined
- by Emacs. `eval-defun' (`M-C-x') is redefined by `edebug.el' to use
- `edebug-defun' if `edebug-all-defuns' is non-`nil', or alternatively,
- if you supply a prefix argument. But if `edebug-all-defuns' is
- non-`nil' and you also supply a prefix argument, `edebug-defun' will
- not be used. In other words, the prefix argument of `eval-defun'
- reverses the effect of `edebug-all-defuns'. The default value of
- `edebug-all-defuns' is `nil'. Call the function `edebug-all-defuns'
- to toggle the value of the variable `edebug-all-defuns'.
-
- Note that this version of `eval-defun' evaluates whatever top level
- form it finds, as it normally does, but only `defun's (and
- `defmacro's) are evaluated with `edebug-defun'.
-
- `eval-region' is redefined to use `edebug-defun' when evaluating
- `defun's (if `edebug-all-defuns' is non-`nil'). The prefix argument
- for `eval-region' has the normal behavior since it is used by other
- functions (including the standard functions `eval-defun',
- `eval-print-last-sexp', and `eval-last-sexp'). If an error occurs
- during the evaluation, point is left after the expression in error.
- Also, this `eval-region' does not use `narrow-to-region' to limit the
- scope of evaluation, and consequently there is a small difference in
- how white space is handled after an expression when the output is
- inserted in the buffer.
-
- `eval-current-buffer' is redefined to use `eval-region', since the
- standard version does not, thus gaining all the benefits of the new
- `eval-region'.
-
- Note that loading does not invoke `edebug-defun', since the load
- functions are subroutines that use the internal `eval-region' rather
- than the redefined one supplied by `edebug.el'. This could be
- considered a feature since loading a file does not also visit the file
- which would be necessary if edebug were to be invoked on one of the
- functions defined in the file.
-
- See *Note Evaluation:: for discussion of other evaluation functions
- available inside of edebug.
-
- File: edebug, Node: Edebug Modes, Next: Miscellaneous, Prev: Evaluating defuns, Up: Top
-
- Edebug Modes
- ============
-
- While your function is being evaluated, edebug is in one of several
- modes. The current mode is called the "edebug mode", not to be
- confused with major or minor modes. The current edebug mode determines
- how edebug displays the progress of the evaluation, whether it stops at
- each stop point, or continues to the next breakpoint, for example.
-
- Each time you enter edebug, you will be in the same mode you
- specified the previous time you were in edebug. The exception is when
- edebug is first entered for each recursive edit level; then the mode
- is changed to the value in the global variable `edebug-initial-mode',
- which defaults to "step" mode. In the case of a command where the
- `interactive' form has an expression argument, the expression is
- evaluated before the function is really entered, so the edebug mode
- defaults to `edebug-initial-mode' both for this expression and for the
- first expression in the function body. (In fact, this repeated
- resetting to the initial mode also occurs each time your function is
- called non-recursively before returning to the command level which
- invoked the function.)
-
- Below is a table of the keys which change the edebug mode. For each
- key, the mode is set and the recursive edit is exited; what happens
- next depends on which mode you selected, which code your function
- executes, and whether a breakpoint is hit. You can also set the edebug
- mode when edebug is not running (or in a non-edebug buffer) by hitting
- `C-xX' (default value of `edebug-global-prefix') followed by the same
- key as used inside of edebug. Most of the other edebug commands are
- available in the same manner.
-
- `SPC'
- (`edebug-step-through') Step mode stops at the next stop point
- encountered.
-
- `t'
- (`edebug-trace') Trace mode pauses one second at each edebug stop
- point.
-
- `T'
- (`edebug-Trace-fast') Trace with zero pause time at each stop
- point.
-
- `c'
- (`edebug-continue') Continue after pausing for one second at each
- breakpoint.
-
- `C'
- (`edebug-Continue-fast') Continue with zero pause time at each
- breakpoint.
-
- `g'
- (`edebug-go') Go until a breakpoint. *Note Breakpoints::.
-
- `G'
- (`edebug-Go-nonstop') Go non-stop ignoring breakpoints. This is
- the fastest way to execute code that has edebug calls in it, but
- this mode of execution is still interruptible; see below.
-
- `S'
- (`edebug-stop') Stop executing at the first stop point
- encountered, regardless of the mode. This command does not
- change the mode and does not continue execution; it is intended
- to be used to interrupt execution.
-
- To execute edebugged code more rapidly, use commands farther down
- in the list. For example, Go-nonstop mode is alot faster that trace
- mode since it ignores breakpoints. The continue modes do not stop at
- breakpoints, but merely pause at them.
-
- While executing or tracing, you can interrupt the execution by
- hitting one of the edebug command characters, at which time the
- command is acted on. For example, hitting SPC will stop execution at
- the first stop point because input is pending, but will then step to
- the next stop point. Alternatively, `S' is bound to `edebug-stop'
- which does nothing but stop. If your function happens to read input,
- a character you hit intending to interrupt execution may be read by
- the function instead, so be careful in the neighborhood of the read
- call. Also see the discussion of errors and quit signals in *Note
- Using Edebug::.
-
- Keyboard macros invoked within edebug will not work across edebug
- calls, so you must enter each edebug command separately. (It doesn't
- seem worth it to save and restore keyboard macro definitions and
- executions between calls to edebug in such a way that it doesn't
- affect any outside command processing, and it may not be possible in
- any case.)
-
- File: edebug, Node: Miscellaneous, Next: Breakpoints, Prev: Edebug Modes, Up: Top
-
- Miscellaneous
- =============
-
- Some miscellaneous commands are described here.
-
- `f'
- (`edebug-forward-sexp') Proceed from the current point to the sexp
- found by first doing `forward-sexp' and then switching to go mode.
- If a prefix argument is supplied, do `forward-sexp' that many
- times. If there are not enough sexps for `forward-sexp', call
- `edebug-step-out' instead. Be careful that the sexp found by
- `forward-exp' will be executed; this will not always be the case
- in a `condition-case', for example. A temporary breakpoint is
- set at the stop point, so it will be used and cleared whenever
- execution reaches it. See *Note Breakpoints:: for the details on
- breakpoints.
-
- Notice that we do the `forward-sexp' starting at the current point
- rather than the stop point, thus providing more flexibility. If
- you want to start the search at the stop point, first do
- `edebug-where' (`w').
-
- `o'
- (`edebug-step-out') Proceed from the current point to the end of
- the containing sexp. If the containing sexp is the top level
- defun, go to the end of the last sexp instead, or if that is the
- same point, then step out of the function. Therefore this
- command does not exit the currently executing function unless you
- are positioned after the last sexp of the function.
-
- Like `edebug-forward-sexp', this command switches to go mode to
- get to the containing sexp. The only situation in which the
- containing sexp will not be reached by edebug is if a non-local
- exit by-passes it.
-
- `i'
- (`edebug-step-in') Step into the function about to be called. Use
- this command before any of the arguments of the function call are
- evaluated since otherwise it will be too late. One side effect
- of using `edebug-step-in' is that the next time the stepped-into
- function is called, edebug will be called there as well. (I may
- try to fix this in the future.)
-
- `h'
- (`edebug-goto-here') Proceed to the stop point near the current
- point. A temporary breakpoint is used. See *Note Breakpoints::
- for details on how the stop point is found.
-
- `d'
- (`edebug-backtrace') A `debug'-like backtrace is displayed. All
- calls to edebug functions are removed to clean up the display.
- This backtrace does not function like the standard backtrace so
- you cannot specify which frames to stop at, etc. - but it is
- better than nothing. The backtrace buffer is killed
- automatically when you continue execution.
-
- File: edebug, Node: Breakpoints, Next: Views, Prev: Miscellaneous, Up: Top
-
- Breakpoints
- ===========
-
- The purpose of "breakpoints" is to let you specify significant
- places in your code where you would like edebug to stop or pause
- execution. Breakpoints may be set at any stop points as defined in
- *Note Using Edebug::, even before symbols. Edebug will stop or pause
- at a breakpoint except when the edebug mode is Go-nonstop. For
- setting and unsetting breakpoints, the stop point that is affected is
- at or after the current point. The following commands are related to
- breakpoints:
-
- `b'
- (`edebug-set-breakpoint') Set a breakpoint at the stop point at
- or after the current point. With prefix-arg, the breakpoint is
- temporary.
-
- `u'
- (`edebug-unset-breakpoint') Unset or clear a breakpoint at the
- stop point at or after the current point.
-
- `x'
- (`edebug-set-conditional-breakpoint') Set a conditional
- breakpoint. You are asked for the conditional expression. With
- prefix-arg, the breakpoint is temporary.
-
- `B'
- (`edebug-next-breakpoint') Move point to the next breakpoint in
- the current function definition.
-
- While in edebug, you can set a breakpoint with `b'
- (`edebug-set-breakpoint') and unset (or clear) it with `u'
- (`edebug-unset-breakpoint'). First move point to a position at or
- before the desired edebug stop point, then hit the key to change the
- breakpoint. Unsetting a breakpoint that has not been set does nothing.
-
- Reevaluating the defun with `edebug-defun' clears all breakpoints
- in the function. (Let me know if you would like breakpoints preserved;
- I could use marks for breakpoints instead of relying on the offsets
- from the beginning of the defun.)
-
- A "conditional breakpoint" is set with `x'
- (`edebug-set-conditional-breakpoint'). When you set a conditional
- breakpoint you will be asked for an expression which is evaluated each
- time the breakpoint is reached. Edebug will only stop at a conditional
- breakpoint if the condition evaluates to non-`nil'. But conditional
- breakpoints are not even checked if the edebug mode is Go-nonstop.
-
- For both conditional and unconditional breakpoints, the breakpoint
- can be made into a "temporary breakpoint" if you give a prefix arg to
- the command. After breaking at a temporary breakpoint, it is
- automatically cleared.
-
- To find out where your breakpoints are, use the `B'
- (`edebug-next-breakpoint') command which moves point to the next
- breakpoint in the function following point, or to the first breakpoint
- if there are no following breakpoints. (Note that this command does
- not continue execution - it just moves the point.)
-
- File: edebug, Node: Views, Next: Evaluation, Prev: Breakpoints, Up: Top
-
- Views
- =====
-
- If the function you are debugging modifies the Emacs window
- environment, you may wish to check the "outside window configuration"
- as it was before edebug was called, since edebug itself also modifies
- the window environment (see *Note Outside Window Configuration:: for
- how edebug tries to restore it). The following commands relate to
- views in general.
-
- `v'
- (`edebug-view-outside') View the outside window configuration.
-
- `p'
- (`edebug-bounce-point') Bounce to the point in the outside current
- buffer, and return after one second.
-
- `w'
- (`edebug-where') Move point back to the current stop point.
-
- `W'
- (`edebug-toggle-save-windows') Toggle the `edebug-save-windows'
- variable. Each time you toggle it, the inside and outside window
- configurations become the same as the current configuration. By
- turning this off and on again, edebug thereafter restores the
- outside window configuration to the current configuration.
-
- You can view the outside window configuration with `v'
- (`edebug-view-outside') or bounce to the current point in the current
- buffer with `p' (`edebug-bounce-point'), even if it is not normally
- displayed. After moving point or changing buffers, you may wish to
- pop back to the stop point with `w' (`edebug-where') from an edebug
- window or `C-xXw' in any window.
-
- File: edebug, Node: Evaluation, Next: Printing, Prev: Views, Up: Top
-
- Evaluation
- ==========
-
- This section describes commands related to the explicit and
- automatic evaluation of expressions in edebug. Edebug attempts to
- make such evaluations while inside of edebug appear that they are
- occuring outside of edebug, as if edebug had not been invoked. Almost
- everything about the outside context is restored (*note The Outside
- Context::. for the details). But `M-ESC' (`eval-expression') still
- evaluates expressions normally (in the current context) since that is
- occasionally needed. Also supported is an evaluation list window
- where expressions may be evaluated interactively or automatically.
-
- You can control the way in which expression results are printed by
- using the `custom-print' package (*note Printing::.).
-
- `e'
- (`edebug-eval-expression') Evaluates an expression in the
- "outside context" of your function, rather than in the edebug
- context as `M-ESC' does. (These commands are therefore
- consistent with the same commands in the standard debugger.)
-
- `C-xC-e'
- (`edebug-eval-last-sexp') Like `eval-last-sexp' except in the
- outside context.
-
- `E'
- (`edebug-visit-eval-list') Jump to an evaluation list window in
- which several other commands apply, described below. The
- evaluation list is reevaluated each time the edebug display is
- updated (including tracing) and the results are displayed in a
- temporary buffer `*edebug*'.
-
- The following commands apply to the evaluation list which is
- displayed in the `*edebug*' buffer. All the `lisp-interaction-mode'
- commands are also available.
-
- `LFD'
- (`edebug-eval-print-last-sexp') Similar to `eval-print-last-sexp'
- but in the outside context.
-
- `C-xC-e'
- (`edebug-eval-last-sexp') Similar to `eval-last-sexp' but in the
- outside context.
-
- `C-cC-u'
- (`edebug-update-eval-list') Build a new evaluation list from the
- first expression of each group, reevaluate and redisplay. Groups
- are separated by a line starting with a comment.
-
- `C-cC-d'
- (`edebug-delete-eval-item') Delete the evaluation list group that
- point is in.
-
- `C-cC-w'
- (`edebug-where') Jump back to the edebug buffer at the current
- stop point.
-
- In the evaluation list window, type in expressions and evaluate them
- with `LFD' (`edebug-eval-print-last-sexp') or `C-xC-e'
- (`edebug-eval-last-sexp'), just as you would for lisp interaction mode
- but the evaluation is done in the outside context. (Note:
- `eval-region' is not redefined to evaluate in the outside context; it
- is only redefined to use `edebug-defun' when it encounters a defun -
- see *Note Evaluating defuns::.)
-
- The expressions you enter interactively, and their results, will be
- lost when you continue execution of your function unless you add them
- to the evaluation list. To add any number of expressions to the
- evaluation list use `C-cC-u' (`edebug-update-eval-list'). This builds
- a new list from the first expression of each "group", where groups are
- separated by a line starting with a comment.
-
- When the evaluation list is redisplayed, each expression is
- displayed followed by the result of evaluating it, and a comment line.
- If an error occurs during an evaluation, the error message is
- displayed in a string as if it were the result. Therefore expressions
- that use undefined variables will not interrupt your debugging. Here
- is an example of what the evaluation list window looks like after
- several expressions have been added to it.
-
- (current-buffer)
- #<buffer *scratch*>
- ;---------------------------------------------------------------
- (point-min)
- 1
- ;---------------------------------------------------------------
- (point-max)
- 2
- ;---------------------------------------------------------------
- edebug-outside-point-max
- "Symbol's value as variable is void: edebug-outside-point-max"
- ;---------------------------------------------------------------
- (recursion-depth)
- 0
- ;---------------------------------------------------------------
- this-command
- eval-last-sexp
- ;---------------------------------------------------------------
-
- You can delete the group that point is positioned in with `C-cC-d'
- (`edebug-delete-eval-item'), or use normal editing commands to modify
- the text as much as you want (e.g. delete-region). Be sure to update
- the evaluation list with `C-cC-u' before you continue evaluation of
- your function or quit to the top level, unless you want your changes
- to be lost. Also be sure to separate each "group" with a comment
- before updating, otherwise the wrong expressions may end up in the
- list.
-
- You can return to the source code buffer (the edebug buffer) with
- `C-cC-w' which is equivalent to `C-xXw'. The `*edebug*' buffer is
- killed when you continue execution of your function, and recreated
- next time it is needed.
-
- If you are concerned with exactly how the evaluation is done, you
- may need to know that the evaluation of expressions occurs in one of
- two slightly different outside contexts. If the evaluation list is
- non-empty when edebug is entered, the context used to evaluate it is
- closest to the true outside context since nothing much has changed when
- the evaluation is done. However, when you evaluate expressions within
- edebug using the above described interactive commands or when you
- update the evaluation list, as much of the outside context is restored
- as possible, but not everything (*note The Outside Context::.). One
- way to observe the difference is to look at the `recursion-depth'.
-
- File: edebug, Node: Printing, Next: The Outside Context, Prev: Evaluation, Up: Top
-
- Printing
- ========
-
- If the results of your expressions contain circular references to
- other parts of the same structure, the standard Emacs print
- subroutines may fail to print with an error, "Apparently circular
- structure being printed". If you only use cdr circular lists (where
- cdrs of lists point back; what is the right term here?), you can limit
- the length of printing with `print-length' and edebug does this for
- you when printing out the previous result. But car circular lists and
- circular vectors generate the above mentioned untrappable error in
- Emacs version 18. Version 19 will support `print-level', but it is
- often useful to get a better print representation of circular
- structures.
-
- To handle printing of structures more generally, you can use the
- `custom-print' package which supports `print-level', `print-circle',
- and further customizations via `custom-print-list' and
- `custom-print-vector'. See the documentation strings of these
- variables for more details. There are two main ways to use this
- package. First, you may replace `prin1', `princ', and some
- subroutines that use them by calling `install-custom-print-funcs' so
- that any use of these functions in lisp code will be affected.
- Second, you could call the custom routines directly, thus only
- affecting the printing that requires them. Edebug uses the second
- method, as described next.
-
- To load the package and activate custom printing only for edebug,
- simply use the command `edebug-install-custom-print-funcs'. This sets
- the function cells of `edebug-prin1', `edebug-print',
- `edebug-prin1-to-string', and `edebug-format' to the symbol names of
- the corresponding custom versions. Therefore, any changes you make to
- the custom functions or to the variables controlling custom printing
- take effect immediately. Notice you still need to set `print-level'
- or `print-circle'. To restore the standard print functions, use
- `edebug-reset-print-funcs'.
-
- File: edebug, Node: The Outside Context, Next: Macro Calls, Prev: Printing, Up: Top
-
- The Outside Context
- ===================
-
- This section is useful for those who need to know more precisely
- what edebug is doing that might affect editing and the context of
- expression evaluation. For the most part, edebug operates
- transparently and there should be no apparent difference running with
- edebug, except for debugging itself. If you find any variation with
- what is described here, please let me know.
-
- An important distinction is made between the "outside context" which
- exists before edebug is invoked, and the "inside context" which exists
- while edebug is active. Most of the outside context is saved and
- restored each time you enter and exit from edebug. In addition, most
- evaluations you do within edebug (see *Note Evaluation::) occur in the
- same outside context which is temporarily restored for the evaluation.
-
- Described in this section are the aspects of the outside context
- that are saved and restored including things as diverse as window
- configurations, current buffer status, and variable values. These
- aspects are divided into three sections, corresponding to the degree to
- which edebug has affected the outside context. The first section,
- immediately following this, is for those things that are affected any
- time edebug is called even if the display is not updated. The second
- section is for when edebug must update the display. The third section
- is for when edebug stops execution and enters a recursive edit.
- Finally, the few unavoidable side effects of using edebug are
- described.
-
- * Menu:
-
- * Just Checking:: Just Checking
- * Outside Window Configuration:: Outside Window Configuration
- * Recursive Edit:: Recursive Edit
- * Side Effects:: Side Effects
-
- File: edebug, Node: Just Checking, Next: Outside Window Configuration, Prev: The Outside Context, Up: The Outside Context
-
- Just Checking
- -------------
-
- The following are saved and restored when edebug is called even if
- the display is not updated. One reason there is anything at all to
- save and restore is that the call to `edebug-enter' must remain active
- while your function is active, and this impacts the Lisp stack. The
- other reason is that execution may be interrupted at any time unless
- the edebug mode is Go-nonstop, but an executing keyboard macro should
- not interrupt execution.
-
- * `max-lisp-eval-depth' and `max-specpdl-size' are both incremented
- for each `edebug-enter' call so that your code should not be
- impacted by edebug frames on the stack. I believe they are
- incremented too much currently, but that is better than not
- enough.
-
- * A keyboard macro executed outside of edebug should not affect the
- operation of edebug. Other input will be caught by edebug,
- however, interrupting execution as described in *Note Edebug
- Modes::. If you are defining a keyboard macro when edebug is
- entered, all your command input will be included in the macro,
- but this is not much use since the macro will not be executed the
- same way. I don't know if it is safe to suspend definition of a
- kbd-macro, or if it is useful to allow execution of a macro to
- continue into edebug. Let me know if you figure this out.
-
- File: edebug, Node: Outside Window Configuration, Next: Recursive Edit, Prev: Just Checking, Up: The Outside Context
-
- Outside Window Configuration
- ----------------------------
-
- One important aspect of the outside context is the "outside window
- configuration". A full description of window configurations may be
- found in the GNU Emacs Lisp Reference Manual. If you are running
- `epoch', the concept of a window configuration is generalized to
- include the set of current screens, though if you create or destroy
- screens while in edebug, this effect will not be reversed.
-
- When you exit from edebug (each time you continue execution, in
- fact), the window configuration outside of edebug is restored to what
- it was before edebug was entered. But since Emacs delays screen
- update until needed, if you then reenter edebug before a screen update
- is required, it will appear that you never left; that is, the outside
- window configuration will not be displayed even though it was in
- effect. If your function completes normally, the outside window
- configuration will finally be displayed when you return to the command
- level, or any time a screen update is forced by some other means (e.g.
- `sit-for').
-
- The window configuration, as defined by Emacs, does not include
- which buffer is current or where point and mark are in the current
- buffer, but edebug saves and restores these also. Note that the
- outside window configuration restored by edebug may not be fully
- consistent with the real outside context since the selected window may
- not yet have been displayed but edebug may have forced screen update.
-
- If the display needs to be updated by edebug, e.g. a trace mode is
- active, the following are saved and restored. However, if an error or
- quit signal occurs, some of these are intensionally not restored for
- user convenience.
-
- * The point of the edebug buffer (the one containing the function
- definition) is saved and restored only if the outside current
- buffer is the same as the edebug buffer. (The point is also not
- restored on error or quit.)
-
- * The outside window configuration, as described above, is saved and
- restored if `edebug-save-windows' is non-`nil'. These are not
- restored on error or quit, but the outside selected window is
- reselected even on error or quit in case a `save-excursion' is
- active. The window start for the edebug buffer is not restored,
- however, so that the next time it is displayed, the window start
- will be in the same position it was last time.
-
- * The current buffer, and point and mark in the current buffer are
- normally saved and restored even if the current buffer is the
- same as the edebug buffer. They are not restored on error or
- quit, but in that event the current buffer will be changed to the
- outside selected window's buffer when you return to the command
- loop, as it normally is.
-
- * The points of all displayed buffers are saved and restored if
- `edebug-save-displayed-buffer-points' is non-`nil'. See the
- description of that variable for more details.
-
- * The `overlay-arrow-position' and `overlay-arrow-string' are saved
- and restored. Since edebug uses these variables, saving and
- restoring also permits recursive use of edebug, or other uses of
- the overlay arrow by the outside context.
-
- * `cursor-in-echo-area' is locally bound to `nil' so that the
- cursor shows up in the window.
-
- File: edebug, Node: Recursive Edit, Next: Side Effects, Prev: Outside Window Configuration, Up: The Outside Context
-
- Recursive Edit
- --------------
-
- If edebug stops execution and enters a recursive-edit, the following
- additional things are saved and restored.
-
- * The read-only status of the edebug buffer, since edebug changes
- it to read-only.
-
- * The current match data, for whichever buffer was current. Note
- that Emacs 18.56 partially fixed a bug in `match-data' so that it
- works better with `string-search'.
-
- * The local keymap of the edebug buffer.
-
- * `last-command', `this-command', `last-command-char', and
- `last-input-char'. Commands within the recursive edit will not
- affect these variables outside of edebug.
-
- But note that the result of `(this-command-keys)' and the value of
- `unread-command-char' cannot be protected, as described below.
-
- * `standard-output' and `standard-input'. `recursive-edit' locally
- binds these to the default `nil' values (correct??).
-
- File: edebug, Node: Side Effects, Prev: Recursive Edit, Up: The Outside Context
-
- Side Effects
- ------------
-
- Many other things may be changed by the user explicitly while in the
- edebug recursive edit if they are not protected against change as
- described above, and this may be considered a feature in most cases.
- However, some possibly undesirable side effects of using edebug remain,
- most of which are unavoidable:
-
- * Changes to the text of buffers are not undone.
-
- * Lisp stack usage is increased, but the limits,
- `max-lisp-eval-depth' and `max-specpdl-size', are also increased
- proportionally.
-
- * The key sequence returned by `this-command-keys' is changed by
- executing commands within edebug and there appears to be no way
- to reset the key sequence from Lisp.
-
- * `unread-command-char' is not protected because its value appears
- to be used even before the command loop is entered by a recursive
- edit. Thus storing a char in `unread-command-char' always causes
- it to be used for a command in edebug. I don't know of a
- work-around.
-
- * Complex commands executed while in edebug are added to the
- `command-history'. This is probably recoverable, but I havent
- investigated it yet.
-
- * When you update the evaluation window, the recursion depth will
- appear one deeper than the outside context recursion depth.
-
- * Horizontal scrolling of the edebug buffer is not recovered. This
- is probably recoverable, but I havent investigated it yet.
-
- * If you discover others, please let me know.
-
- File: edebug, Node: Macro Calls, Next: Options, Prev: The Outside Context, Up: Top
-
- Macro Calls
- ===========
-
- This section describes a mechanism you may use to tell edebug how
- the arguments of macro calls should be evaluated. The same mechanism
- may be used for special forms and some function calls.
-
- To edebug your macro calls, you must specify how the arguments may
- be evaluated. In the general case, not all macro arguments will be
- evaluated. But if it so happens that all your macro arguments are
- "evaluatable" (i.e. they may eventually be evaluated either explicitly
- in the macro body or when the resulting expansion is evaluated), then
- you can set the `edebug-eval-macro-args' option to non-`nil'. On the
- other hand, if you don't want any of your macro arguments to be
- evaluated by edebug then you can ensure they will not be wrapped in
- edebug calls by setting `edebug-eval-macro-args' to `nil' (the
- default).
-
- In the more likely case that some macro arguments are to remain
- unevaluated (e.g. a symbol) and some may be evaluated, you can specify
- an `edebug-form-spec' for each macro. Implementation note: edebug
- uses `edebug-form-spec's for special forms and some function calls as
- well as macro calls. You can do the same, but there is not really
- much point, except for functions that take function arguments.
-
- Use the macro `def-edebug-form-spec' to define a specification for
- a function or macro which is stored in the `edebug-form-spec' property
- of the symbol naming the function or macro. The first argument is the
- symbol name and the second argument is the specification which may be
- one of five kinds of values. First, if a specification for a symbol
- is `nil' or undefined, then depending on the value of
- `edebug-eval-macro-args', all the arguments will be treated as
- evaluatable (if it's non-`nil') or unevaluatable (if it's `nil').
-
- If the specification is a quoted function (symbol or lambda
- expression), then this function is called to process the arguments of
- the calling form.
-
- As a convenience, `def-edebug-form-spec' may be given `t' or `0' as
- its second argument. If it is `t', then all arguments are treated as
- evaluatable; if it is `0' (not `nil'), then all arguments are treated
- as unevaluateable. Implementation note: these values are actually
- converted by `def-edebug-form-spec' to the functions `edebug-forms'
- and `edebug-sexps' respectively.
-
- Finally, if the `edebug-form-spec' is a list, then the elements of
- the list describe the types of the arguments of a calling form. The
- list is processed left to right, in the same order as the arguments of
- the calling form, and the elements constrain the types of corresponding
- arguments and specify whether they may be evaluated. Each element may
- be one of the following:
-
- `symbolp'
- An unevaluated symbol.
-
- `integerp'
- An unevaluated number.
-
- `stringp'
- An unevaluated string.
-
- `vectorp'
- An unevaluated vector.
-
- `atom'
- An unevaluated number, string, symbol, or vector.
-
- `sexp'
- An unevaluated sexp (atom or list); the argument may be `nil' or
- `()' but it must not be missing.
-
- `form'
- An evaluated sexp.
-
- `function'
- A function argument may be a quoted (using quote or function)
- symbol or lambda expression or a form (that should evaluate to a
- function or lambda expression). The body of an anonymous
- function will be treated as evaluateable.
-
- `OTHER'
- Any other symbol should be the name of a function; this function
- is called on the argument as a predicate, and an error is
- signaled if the predicate fails. You could use this to check
- whether a literal is of a certain custom type.
-
- `(...)'
- A sublist of the same format as the top level, processed
- recursively. The actual argument must be a list as well.
- Special case: if the car of the element is quote, the actual
- argument must match the quoted sexp, usually a symbol (see
- example of `for' macro below).
-
- `[...]'
- A sublist of the same format as the top level, processed
- recursively. It is processed like `(...)' except the matched
- arguments are inserted in-line into the arguments matched by the
- containing list, somewhat analogous to `@,' in backquoted
- expressions. This may be used for grouping to build complex
- elements out of the primitives provided.
-
- `&optional'
- All following elements in the specification list at this level
- may or may not match arguments; as soon as one does not match,
- processing of the specification list terminates. To get only one
- specification item to be optional, use `[...]'.
-
- `&rest'
- All following elements in the specification list at this level are
- repeated in order zero or more times. Allowing more than one
- `&rest' element is an extension of the normal meaning of &rest.
- All the `&rest' elements need not be used in every repetition,
- however. Only one `&rest' may appear at the same level of a
- specification list, and `&rest' must not be followed by
- `&optional'. To specify that only some types arguments are to be
- repeated until failure, followed by some other types of
- arguments, use `[...]'.
-
- `&or'
- Each of the following elements in the specification list at this
- level are alternatives, processed left to right until one
- succeeds. To group two or more list elements as one alternative,
- bracket them in `[...]'. Only one `&or' may appear in a list,
- and it may not be followed by `&optional' or `&rest'. One of the
- alternatives must match, unless the `&or' is preceeded by
- `&optional' or `&rest'.
-
- If a failure to match occurs, this does not necessarily mean a
- syntax error will be signalled; instead, "backtracking" will take place
- until all alternatives have been exhausted. `&optional' elements need
- not match at all of course, but evenually every element of the
- argument list must be matched or an error will be signalled.
- Non-optional elements in the specification unused when the argument
- list has been completely matched will also cause backtracking, or
- ultimately a syntax error.
-
- The combination of backtracking, `&optional', `&rest', `&or', and
- `[...]' for grouping provides the equivalent of regular expressions.
- The `(...)' lists require balanced parentheses, which is the only
- context free (finite state with stack) construct supported. Dotted
- pair notation is not yet supported, but let me know if you need it.
-
- I am considering writing a compiler for `edebug-form-spec' list
- forms that would generate elisp code to process arguments the same way
- `edebug-interpret-form-spec' now does it but alot faster. Suggestions
- appreciated.
-
- Here are some examples of using `edebug-form-spec'. A `let' form
- looks like: `(let (BINDINGS ...) FORMS ...)', where each of the
- BINDINGS is either a SYMBOL or `(SYMBOL VALUE-FORM)'. The
- `edebug-form-spec' for a `let' form is defined as follows:
-
- (def-edebug-form-spec let
- '((&rest
- &or symbolp (symbolp &optional form))
- &rest form))
-
- A `for' loop macro is defined in the GNU Emacs Lisp Reference
- Manual (reference needed), and `cl.el' defines `case' and `do' macros.
- Here are their edebug-form-specs.
-
- (def-edebug-form-spec for
- '(symbolp 'from form 'to form 'do &rest form))
-
- (def-edebug-form-spec case
- '(form &rest (sexp form)))
-
- (def-edebug-form-spec do
- '((&rest &or symbolp (symbolp &optional form form))
- (form &rest form)
- &rest body))
-
- Finally, the functions `mapcar', `mapconcat', `mapatoms', `apply',
- and `funcall' all take function arguments, and edebug defines
- specifications like the following one for `apply'.
-
- (def-edebug-form-spec apply '(function &rest form))
-
- Note that backquote (``') is a macro that results in an expression
- that is not necessarily evaluated. It is often used to simplify the
- definition of a macro where the result of the macro call is evaluated,
- but edebug does not know when this is the case. So do not be surprised
- when you cannot step through your backquoted code. 23 On the other
- hand, one could wrap the backquoted expression in a special function,
- say `edebug-`', which would mean that the result of the backquote form
- will, in fact, be evaluated. Then edebug could wrap evaluateable
- expressions within the backquoted expression in edebug calls. Is it
- worth it?
-
- File: edebug, Node: Options, Next: Todo List, Prev: Macro Calls, Up: Top
-
- Options
- =======
-
- * User Option: edebug-all-defuns
- Default `nil'. If non-`nil', all `defuns' and `defmacros'
- evaluated will use edebug. `eval-defun' without prefix arg and
- `eval-region' will use `edebug-defun'.
-
- If `nil', `eval-region' evaluates normally, but `eval-defun' with
- prefix arg uses `edebug-defun'. `eval-region' is called by
- `eval-defun', `eval-last-sexp', and `eval-print-last-sexp'.
-
- You may wish to make this variable local to each elisp buffer by
- calling `(make-local-variable 'edebug-all-defuns)' in your
- `emacs-lisp-mode-hook'. You can use the function
- `edebug-all-defuns' to toggle its value.
-
- * User Option: edebug-eval-macro-args
- Default `nil'. If non-`nil', edebug will assume that all macro
- call arguments for macros that have no `edebug-form-spec' may be
- evaluated, otherwise it will not. To specify exceptions for
- macros that have some arguments evaluated and some not, you
- should specify an `edebug-form-spec' (*note Macro Calls::.).
-
- * User Option: edebug-stop-before-symbols
- Default `nil'. Non-`nil' causes edebug to stop before symbols as
- well as after. This option is used when the `edebug-defun' is
- called, not when edebugging, so set the option before using
- `edebug-defun'.
-
- * User Option: edebug-save-windows
- Default `t'. If non-`nil', save and restore window configuration
- on edebug calls. It takes some time to save and restore, so if
- your program does not care what happens to the window
- configurations, it is better to set this variable to `nil'.
-
- * User Option: edebug-save-point
- Default `t'. If non-`nil', save and restore the point and mark
- in source code buffers.
-
- * User Option: edebug-save-displayed-buffer-points
- Default `nil'. If non-`nil', save and restore the points of all
- buffers, displayed or not.
-
- Saving and restoring buffer points is necessary if you are
- debugging code that changes the point of a buffer which is
- displayed in a non-selected window. If edebug or the user then
- selects the window, the buffer's point will be changed to the
- window's point.
-
- Saving and restoring is an expensive operation since it visits
- each window and each displayed buffer twice for each edebug call,
- so it is best to avoid it if you can.
-
- * User Option: edebug-initial-mode
- Default `'step'. Global initial mode for edebug, if non-`nil'.
- This is used when edebug is first entered for each recursive-edit
- level. Possible values are `nil' (meaning use the current
- edebug-mode), `'step', `'go', `'Go-nonstop', `'trace',
- `'Trace-fast', `'continue', and `'Continue-fast'.
-
- * User Option: edebug-trace
- Default `nil'. Non-`nil' if edebug should show a trace of
- function entry and exit. Tracing output is displayed in a buffer
- named `*edebug-trace*', one function entry or exit per line,
- indented by the recursion level. You can customize by replacing
- functions `edebug-print-trace-entry' and
- `edebug-print-trace-exit'.
-
- File: edebug, Node: Todo List, Prev: Options, Up: Top
-
- Todo List
- =========
-
- Send me your suggestions and priorities.
-
- If you are interested in running edebug on functions in edebug.el,
- I find it easiest to first copy edebug.el into another file, say
- fdebug.el, and replace all strings "edebug" with "fdebug", then
- evaluate the fdebug buffer and run edebug on functions in fdebug.el.
-
- * Bug: Occasionally, your elisp buffer will remain read-only after
- quitting. This is mostly an annoyance, but certainly should be
- fixed. *Let me know if you can see it - I don't see it any
- more. *
-
- * Bug: I've noticed that the point of some buffers was reset to the
- point of some other buffer, but I haven't been able to repeat it
- so perhaps it is fixed.
-
- * Bug: "(" in the first column of doc strings messes up
- `eval-current-buffer', and perhaps others.
-
- * Bug: Some legal token streams are still not processed correctly by
- `edebug-defun'. For now, be sure there is a space before `'' and
- don't use `""' inside strings.
-
- * There are no other known bugs, so if you find any, please let me
- know. There is nothing worse than a buggy debugger!
-
- * Let me know if you find any side effects that could or should be
- avoided. Also *note Side Effects::..
-
- * Figure out how `max-lisp-eval-depth' and `max-specpdl-size'
- should be set.
-
- * Remember the window configuration inside debugger between edebug
- calls and remember original configuration on the first call to
- edebug after an interactive command at a lower level.
-
- * Make edebug work with selective display - dont stop in hidden
- lines.
-
- * Handle top-level expressions (i.e. outside of defs). Store
- offsets in buffer-local variable?
-
- * Debug just one or selected subexpressions of a defun - the rest is
- evalled normally.
-
- * Should `overlay-arrow-position' and `-string' be buffer local?
-
- * Explicit calls to edebug in user code?
-
- * Use copy of `current-local-map' instead of `emacs-lisp-mode-map'
- (but only copy the first time after lower level command - to save
- time).
-
- * Better integration with standard debug.
-
- * Use `inhibit-quit' while edebugging?
-
- * Crawl mode would `sit-for' 0 or 1 in the outside window
- configuration between each edebug step. Maybe it should be a
- separate option that applies to trace as well.
-
- * Customizable `sit-for' time. Less than a second would be nice.
-
- * Counting conditions - stop after n iterations. You can do it
- manually now with conditional breakpoints.
-
- * minibuffer trace - show the current source line in the minibuffer
- instead of moving point to the expression.
-
- * Performance monitoring - summarize trace data.
-
- * Speed up edebug-defun and edebugging - always.
-
- * Preserve breakpoints between edebug-defun compilations?
-
- * Backquote could be handled better, but with difficulty.
-
- * Step into code not previously evaluated with `edebug-defun'.
- Restore to no edebug version after having entered. Partially
- implemented with `i' command.
-
- * Optionally replace expressions with results in a separate buffer
- from the source code. This idea is based on discussions with
- Carl Witty regarding his stepper debugger. Also, unparse code
- into its own buffer if source code is not available, or if user
- wishes to use replace-with-results mode.
-
- * Preserve previous bindings of local variables, and allow user to
- jump back to previous frames, particularly binding frames (i.e.
- `let', `condition-case', function and macro calls) to view values
- at that frame. What about buffer local variables? This is very
- complex, and it would be better to have access to the Lisp stack.
-
- * Variables display, like the evaluation list but automatically
- display all local variable values.
-
- File: edebug, Node: Index, Prev: Top, Up: Top
-
- Index
- *****
-
- * Menu:
-
- * &optional: Macro Calls.
- * &or: Macro Calls.
- * &rest: Macro Calls.
- * *edebug* buffer: Evaluation.
- * *edebug-trace*: Options.
- * .emacs: Installation.
- * ?: Using Edebug.
- * B: Breakpoints.
- * C: Edebug Modes.
- * C-cC-d: Evaluation.
- * C-cC-u: Evaluation.
- * C-cC-w: Evaluation.
- * C-xC-e: Evaluation.
- * C-xC-e: Evaluation.
- * C-xx: Using Edebug.
- * E: Evaluation.
- * G: Edebug Modes.
- * LFD: Evaluation.
- * S: Edebug Modes.
- * SPC: Edebug Modes.
- * T: Edebug Modes.
- * W: Views.
- * `: Macro Calls.
- * a: Using Edebug.
- * abort-recursive-edit: Using Edebug.
- * anonymous lambda expressions: Using Edebug.
- * autoloading edebug: Installation.
- * b: Breakpoints.
- * backquote: Macro Calls.
- * backtracking: Macro Calls.
- * blink current buffer: Views.
- * breakpoints: Breakpoints.
- * buffer point: Todo List.
- * c: Edebug Modes.
- * calling edebug recursively: Using Edebug.
- * clearing breakpoints: Breakpoints.
- * command-history: Side Effects.
- * conditional breakpoints: Breakpoints.
- * continue fast mode: Edebug Modes.
- * continue mode: Edebug Modes.
- * counting conditions: Todo List.
- * current buffer point and mark: Outside Window Configuration.
- * cursor-in-echo-area: Outside Window Configuration.
- * d: Miscellaneous.
- * debug-on-error: Using Edebug.
- * debug-on-quit: Using Edebug.
- * debugger: Using Edebug.
- * debugging edebug: Todo List.
- * def-edebug-form-spec: Macro Calls.
- * defmacro: Using Edebug.
- * defun: Using Edebug.
- * displayed buffer points: Outside Window Configuration.
- * dotted pair notation: Macro Calls.
- * e: Evaluation.
- * edebug: Using Edebug.
- * edebug buffer: Using Edebug.
- * edebug display update: Outside Window Configuration.
- * edebug initialization: Installation.
- * edebug installation: Installation.
- * edebug modes: Edebug Modes.
- * edebug recursive edit: Using Edebug.
- * edebug-Continue-fast: Edebug Modes.
- * edebug-Go-nonstop: Edebug Modes.
- * edebug-Trace-fast: Edebug Modes.
- * edebug-all-defuns: Evaluating defuns.
- * edebug-all-defuns: Options.
- * edebug-all-defuns: Evaluating defuns.
- * edebug-backtrace: Miscellaneous.
- * edebug-bounce-point: Views.
- * edebug-continue: Edebug Modes.
- * edebug-defun: Using Edebug.
- * edebug-delete-eval-item: Evaluation.
- * edebug-enter: Using Edebug.
- * edebug-eval-expression: Evaluation.
- * edebug-eval-last-sexp: Evaluation.
- * edebug-eval-last-sexp: Evaluation.
- * edebug-eval-macro-args: Macro Calls.
- * edebug-eval-macro-args: Options.
- * edebug-eval-print-last-sexp: Evaluation.
- * edebug-form-spec: Macro Calls.
- * edebug-forward-sexp: Miscellaneous.
- * edebug-global-prefix: Edebug Modes.
- * edebug-go: Edebug Modes.
- * edebug-goto-here: Miscellaneous.
- * edebug-help: Using Edebug.
- * edebug-initial-mode: Options.
- * edebug-initial-mode: Edebug Modes.
- * edebug-mode: Using Edebug.
- * edebug-next-breakpoint: Breakpoints.
- * edebug-previous-result: Using Edebug.
- * edebug-print-trace-entry: Options.
- * edebug-print-trace-exit: Options.
- * edebug-save-displayed-buffer-points: Options.
- * edebug-save-displayed-buffer-points: Outside Window Configuration.
- * edebug-save-point: Options.
- * edebug-save-windows: Options.
- * edebug-save-windows: Outside Window Configuration.
- * edebug-set-breakpoint: Breakpoints.
- * edebug-set-conditional-breakpoint: Breakpoints.
- * edebug-step-in: Miscellaneous.
- * edebug-step-out: Miscellaneous.
- * edebug-step-through: Edebug Modes.
- * edebug-stop: Edebug Modes.
- * edebug-stop-before-symbols: Options.
- * edebug-stop-before-symbols: Using Edebug.
- * edebug-toggle-save-windows: Views.
- * edebug-trace: Options.
- * edebug-trace: Edebug Modes.
- * edebug-unset-breakpoint: Breakpoints.
- * edebug-update-eval-list: Evaluation.
- * edebug-view-outside: Views.
- * edebug-visit-eval-list: Evaluation.
- * edebug-where: Views.
- * edebug-where: Evaluation.
- * edebug.el: Installation.
- * emacs lisp stack frames: Just Checking.
- * emacs screen display update: Outside Window Configuration.
- * emacs-lisp-mode: Using Edebug.
- * embedded defun and defmacro: Using Edebug.
- * entering functions: Miscellaneous.
- * epoch screens: Outside Window Configuration.
- * error or quit: Outside Window Configuration.
- * eval-current-buffer: Todo List.
- * eval-current-buffer: Using Edebug.
- * eval-current-buffer: Evaluating defuns.
- * eval-defun: Using Edebug.
- * eval-defun: Evaluating defuns.
- * eval-expression: Evaluation.
- * eval-last-sexp: Evaluating defuns.
- * eval-print-last-sexp: Evaluating defuns.
- * eval-region: Evaluating defuns.
- * evaluate in outside context: Evaluation.
- * evaluation: Evaluation.
- * evaluation defuns: Evaluating defuns.
- * evaluation list group: Evaluation.
- * evaluation list window: Evaluation.
- * exiting functions: Miscellaneous.
- * f: Miscellaneous.
- * function call: Using Edebug.
- * function cell: Using Edebug.
- * function symbol: Macro Calls.
- * g: Edebug Modes.
- * go mode: Edebug Modes.
- * go nonstop mode: Edebug Modes.
- * h: Miscellaneous.
- * i: Miscellaneous.
- * ignore breakpoints: Edebug Modes.
- * in edebug: Using Edebug.
- * inhibit-quit: Todo List.
- * input pending: Edebug Modes.
- * inside context: The Outside Context.
- * interactive expression argument: Edebug Modes.
- * interactive forms: Using Edebug.
- * interrupting execution: Edebug Modes.
- * keyboard macros: Edebug Modes.
- * keyboard macros: Just Checking.
- * lambda expression: Using Edebug.
- * lambda expression: Macro Calls.
- * last-command: Recursive Edit.
- * last-command-char: Recursive Edit.
- * last-input-char: Recursive Edit.
- * lisp stack: Side Effects.
- * lisp-interaction-mode: Evaluation.
- * load-library: Using Edebug.
- * load-path: Installation.
- * loading: Evaluating defuns.
- * local keymap of edebug buffer: Recursive Edit.
- * local variables: Todo List.
- * macro call argument types: Macro Calls.
- * macro calls: Macro Calls.
- * match data of current buffer: Recursive Edit.
- * max-lisp-eval-depth: Todo List.
- * max-lisp-eval-depth: Side Effects.
- * max-lisp-eval-depth: Just Checking.
- * max-specpdl-size: Just Checking.
- * max-specpdl-size: Side Effects.
- * max-specpdl-size: Todo List.
- * minibuffer: Todo List.
- * move to stop point: Views.
- * moving overlay arrow: Using Edebug.
- * moving point: Using Edebug.
- * moving window start: Using Edebug.
- * narrow-to-region: Evaluating defuns.
- * o: Miscellaneous.
- * options: Options.
- * outside context: The Outside Context.
- * outside context for evaluation: Evaluation.
- * outside window configuration: Outside Window Configuration.
- * outside window configuration: Views.
- * overlay-arrow-position: Outside Window Configuration.
- * overlay-arrow-string: Outside Window Configuration.
- * p: Views.
- * pause: Edebug Modes.
- * performance monitoring: Todo List.
- * point in edebug buffer: Outside Window Configuration.
- * preserve breakpoints: Todo List.
- * q: Using Edebug.
- * read sexp: Todo List.
- * read-only: Using Edebug.
- * read-only bug: Todo List.
- * read-only edebug buffer: Recursive Edit.
- * reading input: Edebug Modes.
- * recursion depth: Side Effects.
- * recursive-edit: Recursive Edit.
- * replace with results: Todo List.
- * save-excursion: Outside Window Configuration.
- * saving and restoring: Just Checking.
- * selective display: Todo List.
- * side effects: Todo List.
- * side effects: Side Effects.
- * sit-for: Todo List.
- * sit-for: Outside Window Configuration.
- * special forms: Using Edebug.
- * standard-input: Recursive Edit.
- * standard-output: Recursive Edit.
- * step mode: Edebug Modes.
- * stop execution: Edebug Modes.
- * stop points: Using Edebug.
- * symbols: Using Edebug.
- * syntax error: Macro Calls.
- * syntax error: Using Edebug.
- * t: Edebug Modes.
- * temporary breakpoints: Breakpoints.
- * text changes: Side Effects.
- * this-command: Recursive Edit.
- * this-command-keys: Side Effects.
- * this-command-keys: Recursive Edit.
- * top-level: Using Edebug.
- * top-level expressions: Todo List.
- * trace fast mode: Edebug Modes.
- * trace mode: Edebug Modes.
- * tracing function entry and exit: Options.
- * u: Breakpoints.
- * unread-command-char: Recursive Edit.
- * unread-command-char: Side Effects.
- * using edebug: Using Edebug.
- * v: Views.
- * variables display: Todo List.
- * views: Views.
- * w: Views.
- * window configuration: Outside Window Configuration.
- * window start of edebug buffer: Outside Window Configuration.
- * x: Using Edebug.
- * x: Breakpoints.
-
-
- Tag Table:
- Node: Top892
- Node: Installation2605
- Node: Using Edebug3098
- Node: Evaluating defuns9734
- Node: Edebug Modes12019
- Node: Miscellaneous15964
- Node: Breakpoints18618
- Node: Views21282
- Node: Evaluation22705
- Node: Printing28339
- Node: The Outside Context30369
- Node: Just Checking32162
- Node: Outside Window Configuration33655
- Node: Recursive Edit37124
- Node: Side Effects38161
- Node: Macro Calls39737
- Node: Options48164
- Node: Todo List51350
- Node: Index55262
- End Tag Table
-