2010-11-14 74 views
18

这是我见过的最无用的错误信息。当emacs告诉我“文件模式规格错误”是什么意思?

我认为它翻译为..“错误”。

*消息*缓冲完整的错误信息是:

File mode specification error: (wrong-type-argument characterp "string value here") 

我认为,消息的后半部分意味着emacs的期待一个字符,得到的字符串。

但是,当emacs告诉我“文件模式规范错误”时,我该如何去诊断它的含义?以及如何缩小这个错误起源的位置?

这两个错误(文件模式错误,期望字符和得到的字符串)是如何相关的?

+2

有关错误触发条件的更多上下文将有助于 – 2010-11-14 23:16:17

+0

因此,您是通过find-file打开文件,并在打开文件Emacs报告此错误结束时?还是你自己调用正常模式?你想要打开的文件的类型是什么? – vpit3833 2010-11-15 01:51:12

+0

@ vpit3833,我没有试图打开一个文件。不是明确的。我正在运行一些elisp代码,但是......即使这样也不会打开文件,甚至不会隐式地打开文件。 @理查德,我明白你在问什么,但我没有寻求帮助诊断*这个特殊的错误*。我正在寻找这个版本的常见emacs错误消息的解释。它似乎在许多情况下弹出,通常没有(显然)与打开文件有关。我问,*为什么是这样?* – Cheeso 2010-11-15 12:22:10

回答

24

使用M-Xtoggle-debug-on-errorRET下降到调试器时,会发生这种(或任何)错误 - 假定这是一个适当的错误,而不是仅仅一个消息。这给你堆栈跟踪,所以你可以找出导致它的原因,并从那里继续(可能与edebug,一旦你确定了哪些功能的工具,但你可以用普通的调试器做很多事情)。

标准调试器命令: M-:(info "(elisp) Debugger Commands")RET

用于调试口齿不清(包括edebug)主要手动输入: M-:(info "(elisp) Debugging")RET

FYI,rgrep告诉我,NTEmacs 23.2.1的* .el文件中唯一的字符串“文件模式指定错误”出现在normal-mode函数定义:
M-Xfind-functionRETnormal-modeRET

+0

感谢您的提示,并感谢您做的grep。我会研究“正常模式”,看看我能否理解它。 – Cheeso 2010-11-15 12:24:00

+0

不帮我。即使我有'toggle-debug-on-error',我仍然会得到错误而无法启动调试器(有时会发生这种情况,当我尝试用'ido-find-file'打开文件时,它会创建缓冲区,但不会切换到它,如果我切换,然后手动一切工作正常)。有任何想法吗? – dolzenko 2012-04-06 12:26:13

+0

dolzenko:至少在Emacs 24中,如果'debug-on-error'是'nil',那么*这个消息就会被生成,所以假设你肯定把ON变量切换到ON而不是OFF,那么其他的东西必须禁用'错误发生前调试错误“。 – phils 2012-04-06 12:38:54

4

你可能要说,你使用的是什么版本的Emacs。

如果它是GNU Emacs的23,然后将相关代码在功能normal-modefiles.el,看起来像这样:

(report-errors "File mode specification error: %s" 
    (set-auto-mode)) 

因此函数set-auto-mode(或从那里叫一些功能)信令wrong-type-argument错误和normal-mode正在添加文本File mode specification error以试图帮助您追踪它,但遗憾的是这里没有帮助,因为set-auto-mode的功能是确定缓冲区应具有哪种主要模式,然后打开该模式。我认为这是模式本身就是信号错误。

因此,phils的建议打开debug-on-error,并看看回溯是一个很好的:这应该给你一个线索,以了解发生了什么。

+0

这很有帮助,谢谢。是的,它是Windows上的emacs 23。 – Cheeso 2010-11-15 15:59:43

0

对我来说,这是因为我在我写的函数体的周围有一对额外的()括号。我想这使得lisp尝试执行函数体的返回值。所以要注意你的括号数!