Отладка основного режима Emacs Lisp - PullRequest
5 голосов
/ 29 августа 2009

Я разрабатываю основной режим для Emacs. Можно ли как-нибудь установить точку останова в исходном коде, когда происходит фонификация, например?

Ответы [ 5 ]

7 голосов
/ 29 августа 2009

Найдите источник Lisp функции, через которую вы хотите перейти, и наберите M-x edebug-defun там. Затем, всякий раз, когда эта функция выполняется, вы автоматически помещаетесь в Edebug, где вы можете пройти через нее, если хотите.

Функции фонификации могут быть немного хитрыми, так как они могут быть вызваны в нечетное время. Вы можете использовать функцию message для записи сообщений в буфер *Messages*. Другой прием - отключить блокировку шрифта (чтобы ваша функция не вызывалась автоматически), затем подготовить отлаживаемую функцию с помощью edebug-defun и вызвать ее вручную. (Обратите внимание, что вы можете использовать M-: (a.k.a. eval-expression) для вызова неинтерактивной функции.)

4 голосов
/ 30 августа 2009

Руководство по отладке elisp можно найти здесь .

Вы можете использовать edebug, как уже упоминалось, есть также M-x debug-on-entry , и вы можете установить (setq debug-on-quit t). Проверьте все параметры в ссылке, все зависит от того, как вы хотите скинуть кошку.

2 голосов
/ 30 августа 2009

И, как и на любом другом языке программирования, вы можете отлаживать операторы печати. (message "here, foo=%d" foo) твой друг. (Вы, вероятно, знаете, что эти сообщения накапливаются в буфере *Messages*, поэтому, если они проходят слишком быстро, это не проблема.) trace-function также полезно.

Я написал много режимов emacs, и мне очень редко требовался отладчик. Обычно проблема раскрывается с помощью нескольких удачных операторов печати. ​​

1 голос
/ 05 сентября 2011

Вместо edebug вы можете использовать debug. Чтобы открыть отладчик при входе в функцию, используйте M-x debug-on-entry THE-FUNCTION. Или вставьте вызовы функции debug в исходный код, чтобы они служили точками останова (повторно введите код).

Однако на самом деле фонтификация происходит в нечетное время, включая повторное отображение и т. Д. Если вам действительно нужно отлаживать процесс фонификации, то вы можете использовать функции, а не просто регулярные выражения, в font-lock-keywords.

Но на самом деле вам нужно быть более конкретным в своих проблемах с отладкой блокировки шрифтов. Обычно люди сталкиваются с проблемами: (а) понимания font-lock-keywords (структура) и (б) регулярных выражений, которые не соответствуют тому, что они хотят.

В любом случае, чтобы ответить на ваш вопрос о * точках останова ": Да, просто вставьте (debug) в любую точку, которую вы хотите в исходном коде Lisp. Отладчик будет введен в этот момент.

0 голосов
/ 31 августа 2009

В другой заметке, если вы хотите просто быстро отладить некоторый фрагмент кода lisp, вы можете также использовать режим ielm, который работает, например, как интерактивный режим python.

...