我正在为Emacs开发一个主要模式。有什么方法可以在发生fontification时在源代码中设置一个断点,例如?
答案 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交互模式。