Emacs - как видеть/как отлаживать одну команду elisp/emacs
Есть одна вещь, которая мне не нравится в функции таблицы в Org-mode для emacs. Я хотел бы видеть все функции, которые выполняются функцией, которую я запускаю как команду Emacs.
Каков наилучший способ сделать это? Любые советы, как начать работу с отладочным кодом elisp, особенно с одной командой интереса?
Ответы
Ответ 1
- C-h f имя функции, чтобы найти исходный код для функции.
- C-u C-M-x для функции Edebug.
Всякий раз, когда вызывается функция, Emacs переходит в Edebug, что позволяет легко выполнять функцию пошаговое, проверять переменные и выполнять другие типичные задачи отладки. Подробнее см. (info "(Elisp)Edebug")
.
Ответ 2
Я предпочитаю традиционный отладчик Emacs для edebug. Чтобы использовать его:
M-x debug-on-entry the-function RET
Затем, когда вызывается the-function
, вводится отладчик. Используйте d, чтобы выполнить оценку, и c, если вы хотите пропустить шаг (не погружайтесь в его детали.
Он помогает просматривать определение the-function
в другом окне/кадре, пока вы его проходите.
Ответ 3
C-h f
, чтобы перейти в режим поддержки функций, затем введите имя функции. Если это функция elisp, вы можете просмотреть источник и посмотреть, какие функции он вызывает.
Ответ 4
Если вы хотите программный способ увидеть источник функции (сродни макросу Clojure source
), вы можете использовать подпрограмму 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