我正在开发Emacs的主要模式。例如,当创建发生时,有什么方法可以在源代码中设置一个断点?调试Emacs Lisp主要模式
回答
找到您想要逐步完成的函数的Lisp源,然后在那里输入M-x edebug-defun
。然后,无论什么时候执行该功能,您都会自动放入Edebug中,如果您愿意,可以在其中逐步完成。
但是,分形函数可能有点棘手,因为它们可以在奇数时刻调用。您可以使用message
函数将消息写入*Messages*
缓冲区。另一个技巧是关闭字体锁(所以你的函数不会自动调用),然后准备你正在调试的函数edebug-defun
并手动调用它。 (请注意,您可以使用M-:
(又名eval-expression
)调用非交互式功能。)
用于调试elisp的手册可以是found here。
如上所述,您可以使用edebug
,还有M-x调试入门,您可以设置(setq debug-on-quit t)
。查看链接中的所有选项,这一切都取决于你想如何皮肤的猫。
就像其他任何编程语言一样,您可以使用打印语句进行调试。 (message "here, foo=%d" foo)
是你的朋友。 (您可能知道这些消息是在*Messages*
缓冲区中累积的,所以如果它们过得太快,那不是问题。)trace-function
也很有帮助。
我写了很多emacs模式,并且很少需要调试器。通常情况下,这个问题会暴露在一些恰当的打印语句中。
原则上,调试器只是一个荣耀的'insert-print-statement'机器,但它可以自动执行任务,而不会破坏代码本身。我会发现这个功能对调试我正在编写的elisp函数很有用,特别是因为我对elisp相当陌生 – Alex
在另一个说明,以及如果你只是想快速调试一些lisp片段,你可能也想使用ielm模式,以及例如python交互模式。
而不是edebug
您可以使用debug
。要在输入函数时打开调试器,请使用M-x debug-on-entry THE-FUNCTION
。或者在源代码中插入调用函数debug
作为断点(重新评估代码)。
但是,分形实际发生在奇数时间,涉及重新显示等。如果您确实需要调试分形过程,那么您可以在font-lock-keywords
中使用函数而不仅仅是正则表达式。
但是,您真的需要更具体地了解您的字体锁调试问题。通常人们遇到的问题是(a)理解font-lock-keywords
(结构)和(b)不符合他们想要的正则表达式。
总之,要回答你的问题有关*断点“:是的,只要你在Lisp的源代码,想要的任何位置插入(debug)
调试器将在该点进入
- 1. 主要模式的lisp emacs正则表达式
- 2. 的Emacs Lisp,如何获得缓冲区的主要模式?
- 3. 检测Emacs中的当前主要模式(来自Lisp)?
- 4. Emacs lisp:调试定时器?
- 5. 使用emacs lisp以编程方式设置缓冲区的主要模式
- 6. Emacs Lisp和Common Lisp之间的主要区别是什么?
- 7. 在Emacs上调试Maxima CAS Lisp代码
- 8. Emacs更新红宝石主要模式
- 9. Emacs的股票主要模式列表
- 10. 的Javascript在Emacs的主要模式
- 11. 如何在Emacs Lisp中连接模式?
- 12. 如何调试使Emacs崩溃/使用100%CPU的Emacs lisp?
- 13. 在adoc模式下调试emacs冻结
- 14. Emacs cc的主要模式显示在Ubuntu上没有颜色,但lisp模式确实
- 15. emacs - 在Emacs Lisp模式下自动完成
- 16. Emacs Lisp的形式语法
- 17. 基于主要模式
- 18. Emacs - 当我进入主要模式时,如何自动进入次要模式?
- 19. .emacs循环将某些次要模式分配给某些主要模式
- 20. Emacs:在idlwave主要模式下禁用自动填充次要模式
- 21. Emacs lisp highlighting
- 22. Emacs lisp char-table
- 23. strtotime for Emacs Lisp
- 24. strstr()in emacs lisp?
- 25. common lisp和emacs
- 26. Emacs lisp中的数据类型摘要
- 27. 的Emacs Lisp表达式,为在'自动模式alist`
- 28. ido.el emacs错误:输入调试器 - Lisp错误:(void-variable <html)
- 29. Lisp代码调试
- 30. 检查主要模式是几个emacs的
是的,这适用于我的缩进。 - 区域函数,但是,正如你所警告的那样,不是为了形成函数!谢谢。 – Alex