调试Emacs Lisp主要模式

时间:2009-08-29 16:41:32

标签: emacs elisp

我正在为Emacs开发一个主要模式。有什么方法可以在发生fontification时在源代码中设置一个断点,例如?

5 个答案:

答案 0 :(得分:7)

找到您想要单步执行的函数的Lisp源,并在那里键入M-x edebug-defun。然后,无论何时执行该功能,您都将被自动放入Edebug,如果您愿意,可以在那里单步执行。

Fontification函数可能有点棘手,因为它们可以在奇数时间调用。您可以使用message函数将消息写入*Messages*缓冲区。另一个技巧是关闭字体锁定(因此不会自动调用您的函数),然后使用edebug-defun准备正在调试的函数并手动调用它。 (请注意,您可以使用M-:(a.k.a。eval-expression)来调用非交互式函数。)

答案 1 :(得分:4)

调试elisp的手册可以是found here

您可以使用上面提到的edebug,还有 M-x debug-on-entry ,您可以设置(setq debug-on-quit t)。查看链接中的所有选项,这一切都取决于你想要如何给猫皮肤。

答案 2 :(得分:2)

就像在任何其他编程语言中一样,您可以使用print语句进行调试。 (message "here, foo=%d" foo)是你的朋友。 (您可能知道这些消息是在*Messages*缓冲区中累积的,因此如果它们过快,则不是问题。)trace-function也很有帮助。

我编写了很多emacs模式,很少需要调试器。通常这个问题会暴露出一些很好的印刷语句。

答案 3 :(得分:1)

您可以使用edebug代替debug。要在输入函数时打开调试器,请使用M-x debug-on-entry THE-FUNCTION。或者在源代码中插入对函数debug的调用以作为断点(重新评估代码)。

然而,fontification实际上发生在奇数次,涉及重新显示等。如果你真的需要调试fontification过程,那么你可以在font-lock-keywords中使用函数,而不仅仅是regexp。

但实际上,您需要更加具体地了解字体锁定调试问题。通常,人们遇到的问题是(a)理解font-lock-keywords(结构)和(b)与他们想要的不匹配的正则表达式。

无论如何,要回答关于*断点的问题“:是的,只需在Lisp源代码中的任何位置插入(debug)。此时将输入调试器。

答案 4 :(得分:0)

另外请注意,如果您想快速调试一些lisp片段,您可能也想使用ielm模式,例如python交互模式。