Emacs - 如何查看/如何调试单个elisp函数/ emacs命令

时间:2011-11-25 19:38:07

标签: emacs elisp

对于emacs,在Org-mode中有一件我不喜欢的桌面功能。我希望看到我作为Emacs命令运行的函数执行的所有函数。

最好的方法是什么?有关如何开始使用elisp代码,特别是单个感兴趣的命令的任何提示吗?

4 个答案:

答案 0 :(得分:23)

  1. C-h f 函数名称以查找函数的源代码。
  2. C-u C-M-x 来检测Edebug的功能。
  3. 每当调用该函数时,Emacs将进入Edebug,这使得逐步执行函数,检查变量以及执行其他典型的调试任务变得容易。有关详细信息,请参阅(info "(Elisp)Edebug")

答案 1 :(得分:12)

我更喜欢传统的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

答案 2 :(得分:0)

C-h f进入功能帮助模式,然后输入功能名称。如果它是一个elisp函数,那么您可以查看源代码并自己查找它调用的函数。

答案 3 :(得分:0)

如果你想以编程方式查看函数的来源(类似于Clojure的source宏),你可以使用symbol-function子例程。

例如,我的do-math文件中有一个defun .emacs。要查看其来源,我可以执行以下操作

(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