Comment déboguer les erreurs dans les sentinelles et pendant le verrouillage des polices

10

Lorsqu'une erreur se produit dans une sentinelle de processus ou pendant le verrouillage de police, Emacs n'affiche pas de trace, même s'il debug-on-errorétait précédemment activé.

Je comprends pourquoi ces erreurs sont détectées, la même erreur peut être déclenchée à nouveau lors de la tentative de présentation de la trace. Cependant, quand je veux réellement déboguer cette erreur, ce n'est pas très utile. Je préfère risquer qu'Emac ne réponde pas que de devoir travailler à partir de cela:

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

Après tout, je peux juste démarrer une deuxième instance, si la première commence à devenir folle. Un peu plus de contexte serait utile lorsqu'il existe de nombreux endroits où une telle erreur pourrait théoriquement se produire dans une sentinelle.

Alors, comment puis-je forcer Emacs à afficher une trace, même dans les cas où cela debug-on-errorn'a aucun effet?

tarse
la source
1
J'ai vu emacs.stackexchange.com/questions/3552/… mais je pense qu'il devrait y avoir une question à ce sujet en général, pas seulement un cas particulier. De plus, j'espère vraiment que "utiliser printf" n'est pas la seule réponse, car c'est ce que j'ai utilisé dans le passé, et ce n'est pas satisfaisant, surtout si l'erreur est "Référence de visage non valide: certains-visage-que-je-absolument-sais -exists ", qui pourrait être déclenché par à peu près tous les packages que j'ai installés.
tarsius
L'URL pointe vers cette question et est donc assez déroutant dans votre commentaire, est-ce intentionnel ou une erreur de votre part?
wasamasa
C'est le problème que je voulais dire: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius
le lien prévu par tarsius: emacs.stackexchange.com/questions/1045/… g ug-init-has-no-effect
dcorking

Réponses:

10

Pour les sentinelles de processus, je ne pense pas qu'il y ait une bonne raison. IOW Je pense que c'est juste une fonctionnalité manquante, donc je vous suggère M-x report-emacs-bug.

Pour le verrouillage de police, le problème est plus délicat car ce qui se passe réellement est que l'erreur est déclenchée pendant le verrouillage de jit, c'est-à-dire pendant le réaffichage, et nous ne pouvons pas facilement entrer dans le débogueur à ce moment (IIRC à un moment donné, Gerd a essayé de faire ça marche, mais il y avait encore de sérieux problèmes). Vous pouvez donc le déboguer de l'une des manières suivantes:

  • M-x jit-lock-debug-mode qui change jit-lock pour s'exécuter juste après la réaffichage, afin que nous puissions entrer dans le débogueur.
  • M-: (setq font-lock-support-mode nil) RETpuis désactivez + réactivez le verrouillage de police. De cette façon, font-lock n'utilise plus jit-lock, il s'exécute donc lors de la commande de l'utilisateur plutôt que lors du réaffichage suivant.
Stefan
la source
En fait, debug-on-errorsemble bien fonctionner sur les sentinelles de processus.
Stefan
@tarsius - veuillez publier un lien vers votre problème de
débogage
La demande de fonctionnalité de tarsius est 19432, où elle est marquée comme non reproductible. Stefan Monnier a publié une solution de contournement qui utilise --evalplutôt que --debug-init . De plus, sa solution de contournement ne m'aide pas à faire un retour en arrière dans ma réalité.emacs.d
dcorking
1
@dcorking: non, dans le bug # 19432, je n'ai pas posté de "contournement" mais une tentative infructueuse de reproduire son bug. Pourquoi n'envoyez-vous pas une recette pour reproduire votre problème?
Stefan