53 votes

Comment déboguer elisp?

Normalement le moyen le plus facile pour le débogage est l'aide de printf. Que puis-je faire pour déboguer emacs-lisp? Comment puis-je imprimer quelque chose à l'éditeur emacs de elisp? Ou est-il possible de déboguer elisp code?

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

(charge "auctex.el" nil t t)

69voto

Trey Jackson Points 49816

Le débogueur (edebug) est assez simple à utiliser. Allez à la définition de la fonction, et tapez M-x edebug-defun. La prochaine fois, il est appelé, vous serez en mesure de parcourir le code, comme avec tous les autres débogueur. Type de ? pour la liste des raccourcis clavier, ou consultez la documentation de edebug.

30voto

Drew Points 12071

Il y a deux débogueurs dans GNU Emacs:

  • edebug -- expliqué dans un autre post ici
  • debug

J'utilise debug. Ces points d'entrée (façons de l'utiliser):

  • M-x debug-on-entry suivie par une fonction que vous voulez entrer à l'aide du débogueur.

  • M-x toggle-debug-on-error-- Entrez le débogueur quand une erreur est générée.

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

Vous entrez par le débogueur à l'aide dou c pour sauter sur les détails d'une évaluation particulière.

14voto

jplindstrom Points 563

Ceci est utile pour l'impression des valeurs

(message "Hello (%s)" foo)

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

(prin1 list-foo)

ou (prin1-de-string) de les intégrer dans une (message).

7voto

Dave Bacher Points 7237

La façon la plus simple de débogage peut être pour exécuter votre code de manière interactive. Vous pouvez le faire dans un lisp tampon en plaçant votre point d'après l'expression et l'exécution de C-x C-e (eval-last-sexp).

Sinon:

(message "hello world")

C-h f message pour en savoir plus sur le construit en fonction de message. Si vous générez beaucoup de messages, vous pouvez personnaliser la variable message-log-max pour une plus grande valeur.

3voto

offby1 Points 3412

Pour répondre à vos questions une par une:

  • imprimer quelque chose: il y a des millions de façons. (le message "Bonjour") met à la chaîne dans l'echo de la zone; (insérer "bonjour") met la chaîne de caractères dans le tampon courant au point de ...
  • comment puis-je vérifier si le code suivant est exécuté: je venais tout juste de remplacer "auctex.el" avec (par exemple) "frotzumotzulous" (c'est à dire, toute chaîne de caractère à tous, tant qu'il n'a pas de nom d'un fichier réel) et ensuite voir si vous obtenez un message d'erreur. Si vous n'obtenez pas d'erreur, il est clair que le code n'est pas en cours d'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X