Appendix C. Debugging and Profiling

This appendix describes some facilities in Emacs for testing and debugging your Lisp programs.


A Lisp expression in any buffer can be evaluated by placing the cursor at the end of the expression and pressing C-x C-e (eval-last-sexp). The keystroke M-: (eval-expression) prompts for a Lisp expression to evaluate in the minibuffer. You can also use the commands eval-region and eval-current-buffer.

The *scratch* buffer is normally in Lisp Interaction mode (and if it isn’t, it can be put in that mode with M-x lisp-interaction-mode RET). In that mode, C-j is normally eval-print-last-sexp, which is like eval-last-sexp except that it also inserts the result of evaluation into the buffer. Also in Lisp Interaction mode is C-M-x, eval-defun, which evaluates the “defun” that point is in. The meaning of “defun” in this context is broad; it means the enclosing Lisp expression (if there is one) that begins with an open-parenthesis at the left margin. Finally, Lisp Interaction mode allows you to type partial Lisp symbols and complete them with M-TAB.

Lisp expressions can also be placed in files and loaded with load, load-file, load-library, and require.

The Debugger

Emacs Lisp has a built-in debugging mode that can be invoked automatically under certain circumstances. Entering the debugger is controlled as follows.


This is a command. It prompts (with completion) for the name of a function. ...

Get Writing GNU Emacs Extensions now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.