2009-08-29 2 views
5

Я разрабатываю основной режим для Emacs. Есть ли способ, которым я могу установить точку прерывания в исходном коде, например, когда происходит размножение?Debug Emacs Lisp major mode

ответ

7

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

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

+0

Да, это работает для моего отступа.. -region, но, как вы предупреждаете, не для функции шрифта! Спасибо. – Alex

4

Руководство по отладке elisp может быть found here.

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

2

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

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

+0

В принципе, отладчик - это просто прославленная машина «insert-print-statement», но она автоматизирует задачу для вас, не испортив сам код . И я нашел бы эту функциональность полезной для отладки функции elisp, которую я пишу, тем более, что я довольно новичок в elisp – Alex

0

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

1

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

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

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

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

Смежные вопросы