Un débugueur (ou débogueur ou debugger ) est un soft qui vous aide à résoudre des problèmes que l'on ne comprend pas sur vos scripts.
Il permet notamment d'exécuter un programme pas par pas , c'est à dire d'étudier l'exécution du code en temps réel et y voir en direct la valeur des variables à un endroit précis.
Vous pouvez déboguer votre script comme bon vous semble ; souvent un print
suffit mais dans des cas plus complexes vous pouvez utiliser des logiciels plus poussés comme ipdb qui est une combinaison de ipython et de pdb
Passons par pip
:
pip install ipdb
Il vous suffit de rajouter la ligne suivante à l'endroit où vous voulez deboguer votre code:
import ipdb; ipdb.set_trace()
Ajoutons set_trace
dans notre code comme ceci:
class LoginView(TemplateView): template_name = 'front/index.html' def post(self, request, **kwargs): import ipdb; ipdb.set_trace() username = request.POST.get('username', False) password = request.POST.get('password', False) return render(request, self.template_name)
Puis exécutons notre code (dans notre cas il s'agit d'un script Django )
Nous voyons que le script s'est arrêté et ceci s'affiche dans notre console:
> /home/olivier/mon_projet/front/views.py(31)post() 30 ---> 31 username = request.POST.get('username', False) 32 password = request.POST.get('password', False)
Nous pouvons agrandir la vue pour mieux cerner le contexte en passant pour l'option l
:
ipdb> l
Résulat:
26 27 # logout(request) 28 29 import ipdb; ipdb.set_trace() 30 ---> 31 username = request.POST.get('username', False) 32 password = request.POST.get('password', False) 33 34 user = authenticate(username=username, password=password) 35 if user is not None: 36 if user.is_active:
L'affichage a été augmenté de 4 lignes du haut et du bas.
Toujours dans la console vous pouvez taper le nom de la variable qui vous intéresse pour l'étudier:
ipdb> request.POST <QueryDict: {u'username': [u'olivier'], u'csrfmiddlewaretoken': [u'xxx'], u'password': [u'xxx']}>
Pour passer à la ligne suivante, utilisez la commande n
(pour next) :
ipdb> n
> /home/olivier/perso/mon_projet/front/views.py(32)post() 31 username = request.POST.get('username', False) ---> 32 password = request.POST.get('password', False) 33
l ---> élargir le contexte n ---> passer à la ligne suivante q ---> quitter sauvagement c ---> continuer l'exécution du programme jusqu'à sa fin s ---> rentre dans la fonction de la ligne en cours r ---> execute un return
Livres Python & Django: conseils de lecture