我从 ubuntu 发行版中提取的 Emacs lisp 包有问题。该软件包是 JDEE,每当我打开文件时,它都会Args out of range: "63", 0, 4
在迷你缓冲区和缓冲区中抱怨。*Messages*
此错误似乎已于去年 9 月报告,但尚未采取任何措施。我不是 emacs 新手,我自己编写了一些 Elisp 代码,但我从未尝试过调试这样的东西。当此错误发生时,我想在调试器中停止文件加载,至少可以了解问题的来源。debug-on-error
我已阅读 Elisp 手册的第 18.1.1 节“在出错时输入调试器”,但在使用、debug-ignored-errors
和的各种值组合后尝试加载文件debug-on-signal
似乎没有效果。有人对我的下一步有什么建议吗?
3 回答
如果错误时调试不起作用,我将从源代码本身开始。找到导致问题的键绑定/事件,并找到函数。
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)
,有点类似。
我想 JDEE 以某种方式抑制了错误调试。也许 grep 通过其文件查找错误消息“Args out of range”。调试时,请确保加载未编译的.el
文件,而不是字节编译的.elc
文件(如果您正在运行字节编译的代码,您会在调试器中注意到它),方法是输入类似的命令(load "foo.el")
而不是(load "foo")
.
在我自己的一个脚本中find-grep
意外重新定义后使用时,我遇到了同样的错误。(current-time-string)
使用M-x edebug-defun
上面发布的提示,当我单步执行代码给出错误看到调用时,我设法找到了问题(current-time-string)
。
不确定这对您的情况有多大帮助。