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
Installer ipdb
Passons par pip
:
pip install ipdb
Implémenter ipdb dans votre programme
Il vous suffit de rajouter la ligne suivante à l'endroit où vous voulez deboguer votre code:
import ipdb; ipdb.set_trace()
Exemple
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)
Elargir le contexte
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.
Voir la valeur d'une variable
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']}>
Passer à la ligne suivante
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
Les options
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