2010-11-14 7 views
18

Dies ist die unbrauchbarste Fehlermeldung, die ich je gesehen habe.Was bedeutet es, wenn Emacs mir "Dateimodusspezifikationsfehler" sagt?

Ich denke, es übersetzt sich .. "Fehler".

Die vollständige Fehlermeldung von den *Nachrichten* Puffer ist:

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

ich der letzte Teil dieser Nachricht denken bedeutet, dass Emacs wurde eine Zeichenfolge ein Zeichen und bekam erwartet.

Aber wie gehe ich über die Diagnose, was es bedeutet, wenn Emacs mir "Dateimodusspezifikationsfehler" sagt? und wie kann ich eingrenzen, wo dieser Fehler entsteht?

Wie sind diese zwei Fehler (Dateimodusfehler, erwartete Zeichen und erhaltene Zeichenfolge)?

+2

Ein wenig mehr Kontext über die Bedingungen, unter denen der Fehler ausgelöst wird, würde helfen –

+0

Also, öffnest du eine Datei über Find-Datei und am Ende des Öffnens der Datei meldet Emacs diesen Fehler? Oder rufst du den normalen Modus selbst an? Was ist der Typ der Datei, die Sie öffnen möchten? – vpit3833

+0

@ vpit3833, ich versuche nicht, eine Datei zu öffnen. jedenfalls nicht explizit. Ich führe etwas elisp Code, aber ... selbst das öffnet keine Datei, nicht einmal implizit. @Richard, ich verstehe, was du verlangst, aber ich suche keine Hilfe bei der Diagnose * dieses speziellen Fehlers *. Ich suche eine Erklärung für diese häufig auftretende Emacs-Fehlermeldung. Es scheint unter vielen Umständen aufzutauchen, oft nicht (scheinbar) mit dem Öffnen einer Datei verbunden. Ich frage: * Warum ist das so? * – Cheeso

Antwort

24

Verwenden M-xtoggle-debug-on-errorRET in die Debugger fallen, wenn diese (oder jeder) Fehler auftritt - unter der Annahme, dass dies ein geeigneter Fehler vorhanden ist, und nicht nur eine Nachricht. Das gibt Ihnen die Stack-Trace, so dass Sie herausfinden können, was es verursacht hat, und von dort fortfahren (möglicherweise mit edebug, sobald Sie bestimmt haben, welche Funktion (en) zu instrumentieren, aber Sie können mit dem regulären Debugger viel tun).

Standard-Debugger-Befehle: M-:(info "(elisp) Debugger Commands")RET

Haupt manuelle Eingabe Lisp für die Fehlersuche (einschließlich edebug): M-:(info "(elisp) Debugging")RET

FYI, rgrep sagt mir, dass die einzige Instanz der Zeichenfolge "File Mode specification error" in den * .el-Dateien für NTEmacs 23.2.1 in dererscheintFunktionsdefinition:
M-xfind-functionRETnormal-modeRET

+0

Danke für die Tipps und Danke für die Grep. Ich werde in den "Normal-Modus" schauen und sehen, ob ich etwas davon verstehen kann. – Cheeso

+0

Hilft mir nicht. Selbst wenn ich 'toggle-debug-on-error' habe, bekomme ich immer noch den Fehler, ohne dass der Debugger gestartet wird (dies passiert manchmal, wenn ich versuche, die Datei mit' ido-find-file' zu ​​öffnen, und erstellt den Puffer, aber doesn geh nicht rein, wenn ich dann manuell umschalte funktioniert alles einwandfrei). Irgendwelche Ideen? – dolzenko

+0

dolzenko: In mindestens Emacs 24 wird diese Nachricht * nur * generiert, wenn 'debug-on-error'' nil' ist. Wenn man also die Variable definitiv ein- und nicht ausschaltet, muss etwas anderes deaktiviert werden ' debug-on-error "bevor der Fehler auftritt. – phils

4

Sie möchten vielleicht sagen, welche Version von Emacs Sie verwenden.

Wenn es GNU Emacs 23, dann der entsprechende Code in der Funktion normal-mode in files.el und sieht wie folgt aus:

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

So ist die Funktion set-auto-mode (oder einige von dort aufgerufenen Funktion) signalisiert die wrong-type-argument Fehler und fügt den Text File mode specification error in einem Versuch hinzu, um Ihnen zu helfen, es aufzuspüren, aber leider hilft es hier nicht, weil die Funktion von set-auto-mode ist zu bestimmen, welcher Hauptmodus ein Puffer haben sollte, und dann diesen Modus einschalten. Ich erwarte, dass es der Modus selbst ist, der den Fehler signalisiert.

So lautet der Tipp von phils, debug-on-error einzuschalten und das Backtrace zu betrachten ist eine gute: das sollte Ihnen einen Hinweis geben, was los ist.

+0

Das ist hilfreich, danke. Ja, es ist Emacs 23 unter Windows. – Cheeso

0

Für mich geschah es, weil ich ein zusätzliches Paar () Klammern um einen Funktionskörper hatte, den ich schrieb. Ich denke, dass Lisp versucht, den Rückgabewert des Funktionskörpers auszuführen. Achten Sie also auf Ihre Anzahl an Klammern!

Verwandte Themen