Emacs和Emacs Lisp的故障排除技术

Roh*_*ith 16 emacs elisp

我已经是一个相当常规的emacs用户大约4年了,但在定制emacs和故障排除elisp方面,我仍然是新手.最近,我开始将emacs定制为我的ruby开发环境,我从StackOverflow中的人员那里学到了一些技巧.例如,这里的一些人告诉我有关Cu CMx用edebug检测函数然后逐步执行代码.我还发现,emacs中的大多数命令和模式都提供了大量的钩子(函数或正则表达式或可自定义的变量),这些钩子将提供任何新手想要的大部分内容.
现在我很贪心 - 我正在寻找你曾经使用并且过去发现有用的更多技巧和技巧.

Nou*_*him 13

 (setq debug-on-error t)
 (setq debug-on-quit t)
Run Code Online (Sandbox Code Playgroud)

当你想调试任意深度问题时,这些帮助.你已经发现了edebug(这是我找出其他人代码的首选工具).describe-function通常会为您提供.el文件的链接(以及行号).这对于跳转到问题的根源非常有用.我经常这样做,复制出函数,输入一些message调用并重新评估C-x C-e,以便运行而不是原始运行.

更新:这是我在John Wiegley演讲中提到的一些东西.

(global-set-key (kbd "C-c C-d")
        (lambda () (interactive)
          (setq debug-on-error (if debug-on-error nil t))
          (message (format "debug-on-error : %s" debug-on-error))))
Run Code Online (Sandbox Code Playgroud)

让我们debug-on-error通过一次击键切换.

  • 关于编辑,默认情况下存在`toggle-debug-on-error` :) (2认同)

Jus*_*ith 6

Cx Esc Esc为您提供了已运行的Mx命令的可浏览历史记录,但显示了elisp代码.

IELM是emacs lisp的代表.

Speedbar是浏览.el文件的绝佳方式,我发现自己经常使用Ch i(浏览elisp手册)并使用speedbar浏览主题的节点树.

信息浏览器中的Cs/Cr增量搜索实际上将搜索过去的分页符.

我经常运行M-:测试快速的代码而不必切换到我的*ielm*缓冲区.

对于特别棘手的代码,我在桌面上创建一个快捷方式来运行emacs -q -l development-init.el(这对于处理缓冲区和外部进程的低级操作的代码尤其方便,可以轻松挂起emacs或使用segv杀死它的那种东西).