Подтвердить что ты не робот

Как отладить elisp?

Обычно самый простой способ отладки - использовать printf. Что можно сделать для отладки emacs- lisp? Как я могу напечатать что-то в редакторе emacs из elisp? Или есть способ отладки кода elisp?

Например, как я могу проверить, выполняется ли следующий код в файле .emacs?

(load "auctex.el" nil t t)
4b9b3361

Ответ 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" (т.е. любую строку вообще, если она не называет реальный файл), а затем посмотрите, появилось ли сообщение об ошибке. Если вы не получите ошибки, то ясно, что код не запускается.