Как отладить elisp? - PullRequest
       9

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

53 голосов
/ 15 июля 2010

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

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

(load "auctex.el" nil t t)

Ответы [ 5 ]

67 голосов
/ 15 июля 2010

Отладчик (edebug) довольно прост в использовании.Перейдите к определению функции и введите Mx edebug-defun .В следующий раз, когда он будет вызван, вы сможете пройти по коду, как и в любом другом отладчике.Введите ? для списка сочетаний клавиш или ознакомьтесь с документацией для edebug .

29 голосов
/ 21 августа 2011

В 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 , чтобы пропустить детали конкретной оценки.

14 голосов
/ 10 июня 2012

Это полезно для печати значений

(message "Hello (%s)" foo)

, но не очень хорошо работает для структур данных. Для этого используйте

(prin1 list-foo)

или (prin1-to-string) для встраивания его в (сообщение).

7 голосов
/ 15 июля 2010

Самым простым способом отладки может быть интерактивный запуск вашего кода. Вы можете сделать это в буфере LISP, поместив точку после выражения и выполнив C-x C-e (eval-last-sexp)

В качестве альтернативы:

(message "hello world")

C-h f message , чтобы узнать больше о встроенной функции сообщения. Если вы генерируете много сообщений, вы можете настроить переменную message-log-max на большее значение.

3 голосов
/ 16 июля 2010

Чтобы ответить на ваши вопросы один за другим:

  • напишите что-нибудь: есть миллион способов.(сообщение "Hello") помещает строку в область эха;(вставить "привет") помещает строку в текущий буфер в точке ...
  • как я могу проверить, выполняется ли следующий код: я бы просто заменил "auctex.el" на (скажем)frotzumotzulous "(т. е. любая строка, если она не называет реальный файл), а затем проверьте, не появляется ли сообщение об ошибке.Если вы не получили ошибку, значит, этот код не выполняется.
...