2010-11-14 71 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嘗試執行函數體的返回值。所以要注意你的括號數!