So debuggen Sie Fehler in Sentinels und während der Schriftsperre

10

Wenn ein Fehler in einem Prozess-Sentinel oder beim Sperren von Schriftarten auftritt, zeigt Emacs keine Rückverfolgung an, obwohl dies debug-on-errorzuvor aktiviert wurde.

Ich verstehe, warum diese Fehler abgefangen werden. Der gleiche Fehler wird möglicherweise erneut ausgelöst, wenn versucht wird, die Rückverfolgung darzustellen. Wenn ich diesen Fehler jedoch tatsächlich debuggen möchte, ist er nicht sehr hilfreich. Ich würde lieber riskieren, dass Emacs nicht mehr reagiert, als daran arbeiten zu müssen:

error in process sentinel: Wrong type argument: stringp, nil

Immerhin kann ich einfach eine zweite Instanz starten, wenn die erste verrückt wird. Ein wenig mehr Kontext würde helfen, wenn es viele Stellen gibt, an denen ein solcher Fehler theoretisch in einem Sentinel auftreten könnte.

Wie kann ich Emacs zwingen, eine Rückverfolgung anzuzeigen, selbst wenn dies debug-on-errorkeine Auswirkungen hat?

Tarsius
quelle
1
Ich habe emacs.stackexchange.com/questions/3552/… gesehen, denke aber, dass es im Allgemeinen eine Frage dazu geben sollte, nicht nur einen bestimmten Fall. Ich hoffe auch wirklich, dass "use printf" nicht die einzige Antwort ist, denn das habe ich in der Vergangenheit verwendet, und es ist nicht zufriedenstellend, insbesondere wenn der Fehler "Ungültige Gesichtsreferenz: ein Gesicht, das ich absolut weiß" lautet -exists ", was von so ziemlich jedem Paket ausgelöst werden könnte, das ich installiert habe.
Tarsius
Die URL verweist auf diese Frage und ist daher in Ihrem Kommentar ziemlich verwirrend. Ist dies beabsichtigt oder ein Fehler in Ihrem Namen?
Wasamasa
Das ist das Problem, das ich meinte: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius
der Link Tarsius beabsichtigt: emacs.stackexchange.com/questions/1045/… ‌ ug-init-hat-keine-Wirkung
dcorking

Antworten:

10

Für Prozesswächter gibt es meines Erachtens keinen guten Grund. IOW Ich denke, es ist nur eine fehlende Funktion, also schlage ich Ihnen vor M-x report-emacs-bug.

Bei der Schriftsperre ist das Problem schwieriger, da der Fehler tatsächlich während der JIT-Sperre, dh während der erneuten Anzeige, ausgelöst wird und wir den Debugger in diesem Moment nicht einfach aufrufen können (IIRC hat irgendwann versucht, dies zu tun es funktioniert, aber es gab immer noch einige ernsthafte Probleme). Sie können es also auf eine der folgenden Arten debuggen:

  • M-x jit-lock-debug-mode Dadurch wird jit-lock so geändert, dass es direkt nach der erneuten Anzeige ausgeführt wird, sodass wir den Debugger aufrufen können.
  • M-: (setq font-lock-support-mode nil) RETund dann deaktivieren + wieder aktivieren Sie die Schriftsperre. Auf diese Weise verwendet die Schriftsperre keine Jit-Sperre mehr, sodass sie während des Befehls des Benutzers und nicht während der anschließenden erneuten Anzeige ausgeführt wird.
Stefan
quelle
Scheint eigentlich debug-on-errorgut auf Prozess-Sentinels zu funktionieren.
Stefan
@tarsius - bitte posten Sie einen Link zu Ihrem Debbugs-Problem
dcorking
Die Funktionsanforderung von tarsius lautet 19432 und ist als nicht reproduzierbar gekennzeichnet. Stefan Monnier hat dort eine Problemumgehung veröffentlicht, die --evaleher als verwendet --debug-init . Auch seine Problemumgehung hilft mir nicht, in meinem aktuellen.emacs.d
dcorking
1
@dcorking: Nein, in Fehler Nr. 19432 habe ich keine "Problemumgehung" veröffentlicht, sondern einen fehlgeschlagenen Versuch, seinen Fehler zu reproduzieren. Warum senden Sie kein Rezept, um Ihr Problem zu reproduzieren?
Stefan