Emacs - как увидеть / как отладить одну функцию elisp / команду emacs - PullRequest
17 голосов
/ 25 ноября 2011

Есть одна вещь, которая мне не нравится в табличной функции в режиме Org для emacs. Я хотел бы видеть все функции, которые выполняются функцией, которую я запускаю как команда Emacs.

Каков наилучший способ сделать это? Какие-нибудь советы, как начать работу с отладкой кода elisp, особенно одной интересующей команды?

Ответы [ 4 ]

23 голосов
/ 26 ноября 2011
  1. Ch f имя функции , чтобы найти исходный код функции.
  2. Cu CMx для инструментирования функции для Edebug.

Каждый раз, когда вызывается функция, Emacs попадает в Edebug, что упрощает пошаговое выполнение функции, проверку переменных ивыполнять другие типичные задачи отладки.См. (info "(Elisp)Edebug") для получения дополнительной информации.

12 голосов
/ 27 ноября 2011

Я предпочитаю традиционный отладчик Emacs edebug. Чтобы использовать это:

M-x debug-on-entry the-function RET

Затем, когда вызывается the-function, включается отладчик. Используйте d для пошаговой оценки и c , если вы хотите пропустить шаг (не вдаваясь в детали.

Помогает просмотреть определение the-function в другом окне / фрейме, пока вы шагаете по нему.

Вы можете отменить debug-on-entry, используя M-x cancel-debug-on-entry.

0 голосов
/ 03 марта 2015

Если вам нужен программный способ просмотра источника функции (похожий на макрос source Clojure), вы можете использовать подпрограмму symbol-function.

Например, в моем файле .emacs есть defun do-math. Чтобы увидеть его источник, я могу сделать следующее

(symbol-function 'do-math)

и это дает мне

ELISP> (symbol-function 'do-math)
(lambda
  (expression)
  (interactive "sexpression:")
  (insert
   (number-to-string
    (eval
     (read expression)))))

Смотри также: https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Indirection.html

Смотри также: http://ergoemacs.org/emacs/elisp_symbol.html

0 голосов
/ 25 ноября 2011

C-h f, чтобы перейти в режим справки функции, затем введите имя функции. Если это функция elisp, вы можете просмотреть источник и посмотреть, какие функции он вызывает.

...