Définition d'un point d'arrêt sur un programme Emacs Lisp en cours d'exécution

StackOverflow https://stackoverflow.com/questions/805292

  •  03-07-2019
  •  | 
  •  

Question

J'ai un problème avec un paquet Emacs lisp que j'ai extrait de la distribution Ubuntu. Le paquet est JDEE, et il se plaint de args en dehors de la plage: "63", 0, 4 dans le mini tampon et le tampon * Messages * chaque fois que j'ouvre un fichier. Ce bogue semble avoir été signalé en septembre dernier mais aucune action n'a été entreprise. Je ne suis pas un débutant pour emacs, ayant écrit du code Elisp moi-même, mais je n'ai jamais essayé de déboguer quoi que ce soit de ce genre. Je voudrais arrêter le chargement du fichier dans un débogueur lorsque cette erreur se produit pour au moins avoir une idée de l'origine du problème. J'ai lu la section 18.1.1 du manuel Elisp sur "Saisie du débogueur en cas d'erreur". mais en essayant de charger le fichier après avoir joué avec différentes combinaisons de valeurs pour erreur de débogage , erreurs de débogage ignorées et signal de débogage sur signal semble n'avoir aucun effet. Quelqu'un at-il des suggestions pour ma prochaine étape?

Était-ce utile?

La solution

Si debug-on-error ne fonctionne pas, je commencerais par la source elle-même. Recherchez le raccourci clavier / l'événement à l'origine du problème et localisez la fonction.

C-h k <keystrokes>
M-x find-function <function-name-from-above>

Maintenant, une fois que vous êtes à la source

M-x edebug-defun

Et la prochaine fois que vous appuierez sur la touche, vous devriez pouvoir parcourir le programme. À ce stade, vous pouvez voir quelle partie est à l'origine d'une erreur - et explorer de cette manière.

Vous pouvez également essayer de définir la variable 'stack-trace-on-error pour voir si vous pouvez trouver le coupable (bien que ' debug-on-error fonctionne habituellement pour moi, je ne sais pas pourquoi cela ne le fait pas pour vous).

En dernier recours (si edebug-defun ne fonctionne pas), vous pouvez redéfinir la routine avec un appel à (debug) , en quelque sorte le même.

Autres conseils

Je suppose que JDEE inhibe en quelque sorte le débogage sur erreur. Peut-être que grep passe par ses fichiers pour le message d'erreur "Args hors limites". Pendant le débogage, veillez à charger les fichiers .el non compilés, et non les fichiers .elc compilés par octets (vous le remarquerez dans le débogueur si vous exécutez des compilations octet par octet. code) en saisissant des commandes telles que (chargez "foo.el") au lieu de (chargez "foo") .

La même erreur s'est produite lors de l'utilisation de find-grep après une redéfinition accidentelle de (chaîne d'heure actuelle) dans l'un de mes propres scripts.

En utilisant le conseil Mx edebug-defun posté ci-dessus, j'ai réussi à trouver le problème lorsque j'ai parcouru le code, générant l'erreur de voir l'appel à (chaîne_heure courante) .

Vous n'êtes pas sûr que cela vous soit utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top