这是我见过的最无用的错误消息。
我认为它转化为......“错误”。
来自 * 消息 * 缓冲区的完整错误消息为:
File mode specification error: (wrong-type-argument characterp "string value here")
我认为该消息的后半部分意味着emacs期待一个角色并获得一个字符串。
但是,当emacs告诉我“文件模式规范错误”时,我该如何诊断它意味着什么呢?以及如何缩小此错误的起源?
这两个错误(文件模式错误,期待字符和字符串)如何相关?
答案 0 :(得分:34)
当发生此(或任何)错误时,使用 Mx toggle-debug-on-error
RET 进入调试器 - 假设这是一个正确的错误,而不是只是一条消息。这会给你堆栈跟踪,所以你可以找出导致它的原因,并从那里继续(可能有edebug,一旦你确定了要测试的功能,你可以用常规调试器做很多事情)。 / p>
标准调试器命令:
M - : (info "(elisp) Debugger Commands")
RET
调试lisp(包括edebug)的主要手册条目:
M - : (info "(elisp) Debugging")
RET
仅供参考,rgrep告诉我,NTEmacs 23.2.1的* .el文件中唯一的字符串“文件模式规范错误”出现在normal-mode
函数定义中:
M-x find-function
RET normal-mode
RET
答案 1 :(得分:4)
您可能想说出您正在使用的Emacs版本。
如果它是GNU Emacs 23,则相关代码位于normal-mode
中的files.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
并查看回溯是一个很好的建议:这应该会给你一个关于发生了什么的线索。
答案 2 :(得分:0)
对我而言,之所以发生这种情况,是因为我在我编写的函数体周围有一对attributes: array:6 [▼
"username" => "qweqwe"
"email" => "haikalhikmi@gmail.com"
"name" => "qweqweqew"
"password" => "$2y$10$Ci5usZFP6ANCyBfQhN3Gzexh98Wb8R9n4AmVEvq8x/4bakfGF8l/y"
"cover" => "wallpaper-27058.jpg"
"roles_id" => 1
]
括号。我想这会使lisp尝试执行函数体的返回值。所以要注意你的括号数!