web-dev-qa-db-fra.com

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 à Emacs Editor de ELISP? Ou Y a-t-il un moyen de déboguer du code Elisp?

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

(load "auctex.el" nil t t)
54
prosseek

Le débogueur (Edebug) est assez simple à utiliser. Aller à la définition de la fonction et tapez M-x edebug-defun. La prochaine fois qu'elle est appelée, vous pourrez passer à travers le code comme dans tous les autres débogueurs. Taper ? Pour la liste des keybindings ou consultez la documentation pour EDEBUG .

68
Trey Jackson

Il y a deux debuggers dans GNU EMACS:

  • edebug - expliqué dans un autre poste ici
  • déboguer

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

  • M-x debug-on-entry suivi d'une fonction que vous souhaitez entrer en utilisant le débogueur.

  • M-x toggle-debug-on-error - Entrez le débogueur lorsque lorsqu'une erreur est soulevée.

  • M-x toggle-debug-on-quit - Entrez le débogueur lorsque l'utilisateur frappe C-g.
  • Placez les appels explicites vers la fonction debug à des endroits particuliers (points d'arrêt) dans votre code, pour entrer dans le débogueur à ces endroits:
 (débogage) 

Vous traversez le débogueur en utilisant d, ou c sauter sur les détails d'une évaluation particulière.

30
Drew

Ceci est utile pour l'impression de 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-string) pour l'intégrer dans un (message).

14
jplindstrom

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 cours d'exécution C-x C-e (eval-last-sexp).

Alternativement:

(message "hello world")

C-h f message Pour en savoir plus sur la fonction de message intégrée. Si vous générez de nombreux messages, vous pouvez personnaliser la variable message-log-max à une valeur plus grande.

7
Dave Bacher

Pour répondre à vos questions une par une:

  • imprimer quelque chose: Il y a un million de façons. (Message "Bonjour") met la corde dans la zone d'écho; (Insérer "Hello") met la chaîne dans le tampon actuel au point ...
  • comment puis-je vérifier si le code suivant est exécuté: je vais simplement remplacer "Auctex.el" avec (dites) "Frotzumotzulous" (c'est-à-dire une chaîne du tout, tant qu'elle ne nommait pas de vrai fichier), puis Voyez si vous obtenez un message d'erreur. Si vous n'êtes pas d'erreur, ce code n'est clairement pas exécuté.
3
offby1