我正在開發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