Comment déboguer elisp?

Normalement, le moyen le plus simple de déboguer consiste à utiliser printf . Que puis-je faire pour déboguer emacs-lisp? Comment puis-je imprimer quelque chose dans l’éditeur emacs depuis elisp? Ou existe-t-il un moyen de déboguer le code elisp?

Par exemple, comment puis-je vérifier si le code suivant est exécuté dans le fichier .emacs ?

 (load "auctex.el" nil tt) 

Le débogueur (edebug) est assez simple à utiliser. Accédez à la définition de la fonction et tapez Mx edebug-defun . La prochaine fois qu’il sera appelé, vous pourrez parcourir le code comme avec tous les autres débogueurs. Type ? pour la liste des raccourcis clavier ou consultez la documentation de edebug .

Il y a deux débogueurs dans GNU Emacs:

  • edebug – expliqué dans un autre article ici
  • déboguer

J’utilise le debug . Ce sont des points d’entrée courants (façons de l’utiliser):

  • Mx debug-on-entry suivi d’une fonction que vous souhaitez entrer en utilisant le débogueur.

  • Mx toggle-debug-on-error – Entrez le débogueur lorsqu’une erreur est générée.

  • Mx toggle-debug-on-quit – Entrez le débogueur lorsque l’utilisateur frappe Cg .
  • Placez des appels explicites à la fonction debug à des endroits particuliers (points d’arrêt) dans votre code, pour entrer le débogueur à ces endroits:
     (déboguer)

Vous parcourez le débogueur en utilisant d ou c pour ignorer les détails d’une évaluation particulière.

Ceci est utile pour imprimer des valeurs

 (message "Hello (%s)" foo) 

mais ne fonctionne pas si bien pour les structures de données. Pour cela, utilisez

 (prin1 list-foo) 

ou (prin1-to-ssortingng) pour l’intégrer dans un (message).

Le moyen le plus simple de déboguer peut être d’exécuter votre code de manière interactive. Vous pouvez le faire dans un tampon lisp en plaçant votre point après l’expression et en exécutant Cx Ce ( eval-last-sexp ).

Alternativement:

 (message "hello world") 

Ch f message pour en savoir plus sur la fonction de message intégrée. Si vous générez beaucoup de messages, vous souhaiterez peut-être personnaliser la variable message-log-max à une valeur supérieure.

Répondre à vos questions une par une:

  • imprimer quelque chose: il y a un million de façons. (le message “Bonjour”) met la chaîne dans la zone d’écho; (insérer “hello”) met la chaîne dans le tampon courant au point …
  • Comment puis-je vérifier si le code suivant est exécuté: Je remplacerais simplement “auctex.el” par (disons) “frotzumotzulous” (c.-à-d. une chaîne du tout, tant qu’il ne nomme pas un fichier réel), puis voir si vous obtenez un message d’erreur. Si vous n’obtenez aucune erreur, alors clairement ce code n’est pas exécuté.