如何调试elisp?

时间:2010-07-15 16:02:42

标签: debugging emacs elisp

通常,最简单的调试方法是使用printf。我该怎么做来调试emacs-lisp?如何从elisp打印emacs编辑器?或有没有办法调试elisp代码?

例如,如何检查以下代码是否在.emacs文件中运行?

(load "auctex.el" nil t t)

5 个答案:

答案 0 :(得分:66)

调试器(edebug)非常简单易用。转到函数的定义,然后键入 M-x edebug-defun 。下次调用它时,您将能够像其他调试器一样逐步执行代码。键入以获取键绑定列表,或查看edebug的文档。

答案 1 :(得分:29)

GNU Emacs中有两个调试器:

  • edebug - 在另一篇文章中解释
  • 调试

我使用debug。这些是常见的切入点(使用方法):

  • M-x debug-on-entry后跟您要使用调试器输入的函数。

  • M-x toggle-debug-on-error - 当出现错误时输入调试器。

  • M-x toggle-debug-on-quit - 当用户点击 C-g
  • 时输入调试器
  • 在代码中的特定位置(断点)对函数debug进行显式调用,以便在这些位置输入调试器:
    (debug)

使用 d c 逐步调试调试器以跳过特定评估的详细信息。

答案 2 :(得分:14)

这对于打印值非常有用

(message "Hello (%s)" foo)

但对数据结构效果不佳。为此,请使用

(prin1 list-foo)

或(prin1-to-string)将其嵌入(消息)。

答案 3 :(得分:7)

最简单的调试方法可能是以交互方式运行代码。您可以在表达式之后放置您的点并运行 C-x C-e eval-last-sexp),从而在lisp缓冲区中执行此操作。

可替换地:

(message "hello world")

C-h f message 以了解有关内置消息功能的更多信息。如果生成大量消息,则可能需要将变量message-log-max自定义为更大的值。

答案 4 :(得分:3)

逐一回答您的问题:

  • 打印一些东西:有一百万种方式。 (消息“Hello”)将字符串放入echo区域; (插入“hello”)将字符串放入当前缓冲区中......
  • 如何检查以下代码是否运行:我只需将“auctex.el”替换为(例如)“frotzumotzulous”(即任何字符串,只要它没有命名真实文件) )然后看看你是否收到错误信息。如果没有错误,那么显然代码没有运行。