Emacs - как видеть/как отлаживать одну команду elisp/emacs - программирование
Подтвердить что ты не робот

Emacs - как видеть/как отлаживать одну команду elisp/emacs

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

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

4b9b3361

Ответ 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