Le débogage en Python avec le module pdb

Le débogage est une partie très importante de la programmation, notamment en Python. En réalité, chaque développeur possède sa propre approche du débogage, certains utilisent la fonction print()comme méthode simple et basique. Pendant que d’autres utilisent des outils de débogage réels qui peuvent faire gagner beaucoup de temps.

debogage-en-python

L’inconvénient de la commande print() est que vous devez ajouter des modifications à votre code, puis l’exécuter une autre fois pour détecter la ligne de code qui a causé le problème.

Par ailleurs, un débogueur est un outil qui vous permet, d’ouvrir l’application à un certain endroit afin que vous puissiez jeter un coup d’œil à vos variables et définir des points d’arrêt conditionnels. C’est comme ouvrir le capot de votre voiture pour voir d’où vient la fumée, chercher pièce par pièce pour identifier le problème.

Python possède un débogueur intégré appelé pdb. C’est un outil simple qui possède les principales fonctionnalités de débogage dont vous aurez besoin.

Le débogage avec le module pdb

Le module pdb (python deboguer) est intégré à la bibliothèque standard Python. Le principal avantage de pdb est qu’il fonctionne uniquement en ligne de commande, ce qui le rend idéal pour le débogage de code sur des serveurs distants.

Le débogage avec le module pdb permet de :

  • Définir des points d’arrêt
  • Parcourir le code
  • Afficher des traces de pile

Il existe plusieurs méthodes pour utiliser un débogueur.

Le moyens le plus simple est d’insérer les commandes import pdb, pdb.set_trace(). Exécuter le script normalement et l’exécution s’arrêtera là où nous avons introduit un point d’arrêt. Donc, fondamentalement, nous codons en dur un point d’arrêt en ligne de commande. Avec python 3.7 et les versions ultérieures, il existe une fonction intégrée appelée breakpoint() qui fonctionne de la même manière. Prenons un exemple pour voir comment insérer la fonction set_trace().

Nous allons créer un fichier test.py avec le code suivant :

import pdb

def addition(a, b):
    result = a + b
    return result

pdb.set_trace()
x = input("Saisissez un nombre : ")
y = input("Saisissez un autre nombre : ")
som = addition(x, y)
print(som)

Exécution du code.

> /home/henke/test.py(8)<module>()
-> x = input("Saisissez un nombre : ")
(Pdb) 

Dans la première ligne nous avons un chevron, suivi du chemin de notre fichier, puis le numéro de ligne du point d’arrêt et on termine avec <module>(). Si le point d’arrêt était dans la fonction, son nom apparaîtra dans <>. Puis nous avons une ligne affichant le point d’arrêt, avec un code qui n’est pas encore exécuté. Et en termine avec l’invite pdb.

Python s’arrête et attend que vous lui disiez quoi faire.

Afin de parcourrir le code, nous utiliserons les commandes suivantes :

help – afficher toutes les commandes.
next – Exécuter la ligne actuelle et passer à la ligne suivante en ignorant les appels de fonction.
where – Afficher la trace de la pile et le numéro de la ligne actuelle.
step – passer à la première ligne de la fonction appellée.

Pour vérifier le type de la variable, saisissez whatis et le nom de la variable. Dans notre exemple, la vérification du type de x est renvoyée sous la forme <class string>. Ainsi, la modification du typage de la chaîne en int résoudra l’erreur. Puisque, input() renvoie une chaîne de caractère par défaut.

Utilisation du terminal ou une invite de commande

L’exécution du code dans un terminal ou une invite de commande est plus facile. Utilisez la commande cd pour naviguer dans le répertoire contenant le fichier test.py puis saisissez.

python3 test.py
> /home/henke/test.py(8)<module>()
-> x = input("Saisissez un nombre : ")
(Pdb) next    # saisissez next
Saisissez un nombre : 3

Lorsque vous tapez next, le débogueur passe à la commande suivante.

> /home/henkes/test.py(9)<module>()
-> y = input("Saisissez un autre nombre : ")
(Pdb) next    # saisissez next
Saisissez un autre nombre : 5

À présent nous allons vérifier le type des variables et leur classe.
La commande p qui est un alias de print permet d’afficher le contenu des variables .

> /home/henke/test.py(10)<module>()
-> som = addition(x, y)
(Pdb) p x
'3'
(Pdb) p y
'5'
(Pdb) whatis x
<class 'str'>
(Pdb) whatis y
<class 'str'>
(Pdb) 

Comme vous pouvez le constater, notre code exécute une concaténation au lieu d’une addition parce que les variables sont de type str.

L’autre méthode pour démarrer le débogueur est d’exécuter la commande suivante via votre terminal:

python -m pdb test.py

La commande m importera n’importe quel module Python et l’exécutera en tant que script. Dans ce cas, nous importons et exécutons le module pdb, que nous transmettons à la commande.

Le débogage en Python avec le module pdb

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Retour en haut