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

Emacs-如何查看/如何调试单个elisp函数/Emacs命令,emacs,elisp,Emacs,Elisp,有一件事我不喜欢emacs在组织模式下的表函数。我希望看到我作为Emacs命令运行的函数执行的所有函数 最好的方法是什么?关于如何开始调试elisp代码,特别是感兴趣的单个命令的任何提示?C-h f要进入函数帮助模式,请键入函数名称。如果它是一个elisp函数,那么您可以查看源代码并查找它调用的函数 C-hf函数名,用于查找函数的源代码 C-uC-M-x为Edebug的功能插入仪器 无论何时调用函数,Emacs都会陷入Edebug,这使得逐步执行函数、检查变量和执行其他典型调试任务变得容易。有关

有一件事我不喜欢emacs在组织模式下的表函数。我希望看到我作为Emacs命令运行的函数执行的所有函数


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

C-h f
要进入函数帮助模式,请键入函数名称。如果它是一个elisp函数,那么您可以查看源代码并查找它调用的函数

  • C-hf函数名,用于查找函数的源代码
  • C-uC-M-x为Edebug的功能插入仪器

  • 无论何时调用函数,Emacs都会陷入Edebug,这使得逐步执行函数、检查变量和执行其他典型调试任务变得容易。有关更多信息,请参见
    (info“(Elisp)Edebug”)

    与Edebug相比,我更喜欢传统的Emacs调试器。要使用它:

    M-x debug-on-entry the-function RET
    
    然后,无论何时调用函数,都会输入调试器。使用d逐步完成评估,如果您想跳过某个步骤(而不是深入了解其细节),则使用c

    它有助于在另一个窗口/框架中查看函数的定义


    您可以使用
    M-x cancel debug on entry
    取消
    debug on entry
    取消
    如果您希望通过编程方式查看函数源(类似于Clojure的
    source
    宏),您可以使用
    符号函数
    子例程

    例如,在我的
    .emacs
    文件中有一个defun
    domath

    (符号函数“做数学运算”)
    

    它给了我

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

    另见:

    某些平台,如Gnome 3,不允许Emacs接收
    C-M-x
    。因此,要使用edebug来检测该功能,请使用
    C-u M-x eval defun
    。启用后如何禁用该功能?