Я разрабатываю основной режим для Emacs. Есть ли способ, которым я могу установить точку прерывания в исходном коде, например, когда происходит размножение?Debug Emacs Lisp major mode
ответ
Найдите источник Lisp функции, которую вы хотите пройти, и введите M-x edebug-defun
. Затем, всякий раз, когда эта функция выполняется, вы автоматически включаетесь в Edebug, где вы можете пройти через нее, если хотите.
Функциональные функции могут быть немного сложными, поскольку они могут быть вызваны в нечетные времена. Вы можете использовать функцию message
для записи сообщений в буфер *Messages*
. Другой трюк заключается в отключении Font Lock (поэтому ваша функция не запускается автоматически), а затем готовят функцию, которую вы отлаживаете, с помощью edebug-defun
и вызываете ее вручную. (Обратите внимание, что вы можете использовать M-:
(a.k.a. eval-expression
), чтобы вызвать неинтерактивную функцию.)
Руководство по отладке elisp может быть found here.
Вы можете использоваться edebug
как уже упоминалось, есть также M-х отладки на входе и вы можете установить (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) регулярные выражения, которые не соответствуют тому, что они хотят.
Во всяком случае, чтобы ответить на ваш вопрос * контрольные точки ": Да, просто вставьте (debug)
в любой момент вы хотите в исходном коде Lisp отладчик будет введен в тот момент
- 1. Динамические переменные в Emacs Lisp
- 2. Ошибка Emacs org-mode
- 3. Программирование основного режима буфера с emacs lisp
- 4. Emacs Lisp
- 5. Emacs fixme mode на javascript
- 6. Правильное использование заявки в Emacs Lisp?
- 7. lisp emacs regex синтаксис для основных режимов
- 8. Emacs Java Malabar Mode
- 9. playframework debug mode DuplicateMemberException
- 10. Emacs Lisp вопрос
- 11. Изменение цвета Emacs Mode-Line на основе основного режима
- 12. visual studio debug vs mode mode
- 13. Основное имя режима emacs-lisp
- 14. Ошибка Emacs Desktop-save-mode
- 15. emacs: file mode specification error
- 16. Почему эти переходы в режиме prog-mode не работают в emacs-lisp-mode?
- 17. Emacs SSIS "mode"?
- 18. emacs vc mode checkin
- 19. Emacs Haskell Mode Flymake
- 20. Emacs with Tramp mode
- 21. Emacs mode вопрос
- 22. Emacs flycheck C99 mode
- 23. Emacs term-mode colors
- 24. emacs с sml-mode
- 25. Emacs python-mode file mode спецификация ошибка
- 26. Emacs Lisp: nesting превышает `max-lisp-eval-depth 'в ibuffer
- 27. Emacs evil-mode and ensime
- 28. Emacs не видит новую установку Org-Mode
- 29. Выберите специальный режим emacs major в командной строке
- 30. [emacs] [Tuareg-mode] Определение функции символа недействительно: dolist
Да, это работает для моего отступа.. -region, но, как вы предупреждаете, не для функции шрифта! Спасибо. – Alex