2

我从 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似乎没有效果。有人对我的下一步有什么建议吗?

4

3 回答 3

7

如果错误时调试不起作用,我将从源代码本身开始。找到导致问题的键绑定/事件,并找到函数。

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),有点类似。

于 2009-04-30T05:48:42.543 回答
0

我想 JDEE 以某种方式抑制了错误调试。也许 grep 通过其文件查找错误消息“Args out of range”。调试时,请确保加载未编译的.el文件,而不是字节编译的.elc文件(如果您正在运行字节编译的代码,您会在调试器中注意到它),方法是输入类似的命令(load "foo.el")而不是(load "foo").

于 2009-04-30T06:10:28.733 回答
-1

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

使用M-x edebug-defun上面发布的提示,当我单步执行代码给出错误看到调用时,我设法找到了问题(current-time-string)

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

于 2011-01-05T10:43:29.840 回答