[英]Debug Emacs Lisp major mode
我正在為Emacs開發一個主要模式。 例如,有什么方法可以在發生事件時在源代碼中設置斷點嗎?
找到您想要單步執行的函數的Lisp源,並在那里鍵入Mx edebug-defun
。 然后,無論何時執行該功能,您都將被自動放入Edebug,如果您願意,可以在其中單步執行。
但是,Fontification函數可能有點棘手,因為它們可以在奇數時間調用。 您可以使用message
功能將消息寫入*Messages*
緩沖區。 另一個技巧是關閉字體鎖定(這樣你的函數不會被自動調用),然后使用edebug-defun
准備你正在調試的函數並手動調用它。 (注意,您可以使用M-:
也稱為eval-expression
)來調用非交互式函數。)
可在此處找到調試elisp的手冊。
您可以使用edebug
提到的edebug
,還有Mx debug-on-entry ,你可以設置(setq debug-on-quit t)
。 查看鏈接中的所有選項,這一切都取決於你想要如何給貓皮膚。
就像在任何其他編程語言中一樣,您可以使用print語句進行調試。 (message "here, foo=%d" foo)
是你的朋友。 (你可能知道這些消息是在*Messages*
緩沖區中累積的,所以如果它們過得太快,那就不是問題了。) trace-function
也很有幫助。
我編寫了很多emacs模式,很少需要調試器。 通常,問題會暴露出一些很好的印刷語句。
您可以使用debug
而不是edebug
。 要在輸入函數時打開調試器,請使用Mx debug-on-entry THE-FUNCTION
。 或者在源代碼中插入對函數debug
調用以作為斷點(重新評估代碼)。
然而,fontification實際上發生在奇數次,涉及重新顯示等。如果你真的需要調試fontification過程,那么你可以在font-lock-keywords
使用函數,而不僅僅是regexps。
但實際上,您需要更加具體地了解字體鎖定調試問題。 通常,人們遇到的問題是:(a)理解font-lock-keywords
(結構)和(b)與他們想要的不匹配的正則表達式。
無論如何,要回答關於*斷點的問題“:是的,只需在Lisp源代碼中的任何一點插入(debug)
。此時將輸入調試器。
另外請注意,如果您想快速調試一些lisp片段,您可能也想使用ielm模式,其工作方式類似於python交互模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.