Как отладить elisp?
Обычно самый простой способ отладки - использовать printf
. Что можно сделать для отладки emacs- lisp? Как я могу напечатать что-то в редакторе emacs из elisp? Или есть способ отладки кода elisp?
Например, как я могу проверить, выполняется ли следующий код в файле .emacs
?
(load "auctex.el" nil t t)
Ответы
Ответ 1
Отладчик (edebug) довольно прост в использовании. Перейдите к определению функции и введите M-x edebug-defun. В следующий раз, когда он будет вызываться, вы сможете выполнить код как с любым другим отладчиком. Введите ? для списка привязок клавиш или ознакомьтесь с документацией для edebug.
Ответ 2
В GNU Emacs есть два отладчика:
- edebug - объясняется в другом сообщении здесь
- отладки
Я использую debug
. Это общие точки входа (способы его использования):
-
M-x debug-on-entry
, за которым следует функция, которую вы хотите ввести с помощью отладчика.
-
M-x toggle-debug-on-error
-
Введите отладчик, когда возникает ошибка.
-
M-x toggle-debug-on-quit
-
Введите отладчик, когда пользователь нажимает C-g.
- Поместите явные вызовы функции
debug
в определенные места (точки останова) в вашем коде, чтобы ввести отладчик в этих местах:
(debug)
Вы проходите через отладчик с помощью d или c, чтобы пропустить детали конкретной оценки.
Ответ 3
Это полезно для печати значений
(message "Hello (%s)" foo)
но не так хорошо работает для структур данных. Для этого используйте
(prin1 list-foo)
или (prin1-to-string), чтобы вставить его в (сообщение).
Ответ 4
Самый простой способ отладки - это запустить ваш код в интерактивном режиме. Вы можете сделать это в буфере lisp, разместив свою точку после выражения и запустив C-x C-e (eval-last-sexp
).
В качестве альтернативы:
(message "hello world")
C-h f message, чтобы узнать больше о встроенной функции сообщений. Если вы создаете много сообщений, вы можете настроить переменную message-log-max
на большее значение.
Ответ 5
Чтобы ответить на ваши вопросы один за другим:
- напечатайте что-нибудь: там миллион способов. (сообщение "Hello" ) помещает строку в область эха; (вставить "hello" ) помещает строку в текущий буфер в точке...
- Как я могу проверить, запущен ли следующий код: я бы просто заменил "auctex.el" на (скажем) "frotzumotzulous" (т.е. любую строку вообще, если она не называет реальный файл), а затем посмотрите, появилось ли сообщение об ошибке. Если вы не получите ошибки, то ясно, что код не запускается.