在正在运行的Emacs Lisp程序上设置断点

时间:2009-04-30 03:58:17

标签: emacs elisp

我遇到了从ubuntu发行版中删除的Emacs lisp包的问题。该软件包是JDEE,每当我打开文件时,它都会在迷你缓冲区和Args out of range: "63", 0, 4缓冲区中抱怨*Messages*。该错误似乎已于去年9月报告,但未采取任何措施。我不是一个emacs新手,自己编写了一些Elisp代码,但我从来没有尝试过调试这样的东西。我想在发生此错误时停止调试器中的文件加载,至少可以了解问题的来源。我已阅读Elisp手册中有关“在出错时输入调试程序”的第18.1.1节,但尝试在播放debug-on-errordebug-ignored-errors和{{1的各种值组合后加载文件似乎没有效果。有人对我的下一步有任何建议吗?

3 个答案:

答案 0 :(得分:6)

如果error-on-error不起作用,我会从源本身开始。找到导致问题的键绑定/事件,找到该函数。

C-h k <keystrokes>
M-x find-function <function-name-from-above>

现在,一旦你在源头

M-x edebug-defun

下次按键时,您应该可以单步执行该程序。此时,您可以看到哪个部分导致错误 - 并向下钻取。

您也可以尝试设置变量'stack-trace-on-error以查看是否可以找到罪魁祸首(虽然'debug-on-error通常适合我,但不确定为什么它不适合您。)

作为最后的手段(如果edebug-defun不起作用),您可以通过调用(debug)来重新定义例程,也可以这样做。

答案 1 :(得分:0)

我认为JDEE在某种程度上会抑制错误调试。也许grep通过其文件的错误消息“Args超出范围”。在调试时,确保加载未编译的.el文件,而不是字节编译的.elc文件(如果运行字节编译的代码,则会在调试器中注意到它),方法是输入{{{} 1}}而不是(load "foo.el")

答案 2 :(得分:-1)

在我自己的一个脚本中意外重新定义find-grep后使用(current-time-string)时出现了同样的错误。

使用上面发布的M-x edebug-defun提示,当我逐步执行代码时,我发现了问题,错误地看到了对(current-time-string)的调用。

不确定这对你的情况有多大帮助。