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

20

在Emacs的Org-mode中,有一件事情我不太喜欢表格函数。我希望能够查看由我运行的Emacs命令执行的所有函数。

如何做到这一点?有什么提示可以帮助我开始调试elisp代码,特别是单个感兴趣的命令?

4个回答

26
  1. 使用C-hf 函数名查找函数的源代码。
  2. 使用C-uC-M-x为函数进行Edebug调试。

每当调用该函数时,Emacs将进入Edebug,这使得逐步执行函数、检查变量和执行其他典型的调试任务变得容易。有关更多信息,请参见(info "(Elisp)Edebug")


2
一些平台(例如Gnome 3)不允许Emacs接收C-M-x。因此,要使用C-u M-x eval-defun来对函数进行调试。 - Wilfred Hughes

17

我更喜欢传统的Emacs调试器而不是edebug。要使用它:

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

每当调用the-function时,都会进入调试器。使用d逐步执行代码,并使用c跳过步骤(不要深入细节)。

在执行代码的同时,在另一个窗口/框架中查看the-function的定义将会很有帮助。

您可以使用M-x cancel-debug-on-entry取消debug-on-entry


一旦启用了,如何禁用它? - BallpointBen

0

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


0

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

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

(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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接