Introduction
Le code n'est jamais parfait. Vous aurez toujours des bugs. Le débogage de code est une compétence que vous devez apprendre.
This tutorial is from open-source community. Access the source code
💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici
Le code n'est jamais parfait. Vous aurez toujours des bugs. Le débogage de code est une compétence que vous devez apprendre.
Donc, votre programme s'est planté...
$ python3 blah.py
Traceback (most recent call last):
File "blah.py", line 13, in?
foo()
File "blah.py", line 10, in foo
bar()
File "blah.py", line 7, in bar
spam()
File "blah.py", 4, in spam
line x.append(3)
AttributeError: 'int' object has no attribute 'append'
Maintenant quoi?!
La dernière ligne est la cause spécifique du crash.
$ python3 blah.py
Traceback (most recent call last):
File "blah.py", line 13, in?
foo()
File "blah.py", line 10, in foo
bar()
File "blah.py", line 7, in bar
spam()
File "blah.py", 4, in spam
line x.append(3)
## Cause of the crash
AttributeError: 'int' object has no attribute 'append'
Cependant, il n'est pas toujours facile de lire ou de comprendre.
POINT D'ASTUCE : Collez toute la trace d'erreur dans Google.
Utilisez l'option -i
pour maintenir Python actif lors de l'exécution d'un script.
$ python3 -i blah.py
Traceback (most recent call last):
File "blah.py", line 13, in?
foo()
File "blah.py", line 10, in foo
bar()
File "blah.py", line 7, in bar
spam()
File "blah.py", 4, in spam
line x.append(3)
AttributeError: 'int' object has no attribute 'append'
>>>
Elle conserve l'état de l'interpréteur. Cela signifie que vous pouvez examiner le code après le crash. Vérifier les valeurs des variables et d'autres états.
Le débogage avec l'instruction print()
est assez courant.
Conseil : assurez-vous d'utiliser repr()
def spam(x):
print('DEBUG:', repr(x))
...
repr()
vous montre une représentation exacte d'une valeur. Pas la sortie d'affichage élégante.
>>> from decimal import Decimal
>>> x = Decimal('3.4')
## SANS `repr`
>>> print(x)
3.4
## AVEC `repr`
>>> print(repr(x))
Decimal('3.4')
>>>
Vous pouvez lancer manuellement le débogueur à l'intérieur d'un programme.
def some_function():
...
breakpoint() ## Entrez dans le débogueur (Python 3.7+)
...
Cela lance le débogueur au niveau de l'appel breakpoint()
.
Dans les versions antérieures de Python, vous faisiez ainsi. Vous verrez parfois cela mentionné dans d'autres guides de débogage.
import pdb
...
pdb.set_trace() ## Au lieu de `breakpoint()`
...
Vous pouvez également exécuter un programme complet sous le débogueur.
$ python3 -m pdb someprogram.py
Il entrera automatiquement dans le débogueur avant la première instruction. Vous permettant de définir des points d'arrêt et de modifier la configuration.
Commandes de débogueur courantes :
(Pdb) help ## Obtenir de l'aide
(Pdb) w(here) ## Afficher la trace de pile
(Pdb) d(own) ## Descendre d'un niveau de pile
(Pdb) u(p) ## Monter d'un niveau de pile
(Pdb) b(reak) loc ## Définir un point d'arrêt
(Pdb) s(tep) ## Exécuter une instruction
(Pdb) c(ontinue) ## Continuer l'exécution
(Pdb) l(ist) ## Lister le code source
(Pdb) a(rgs) ## Afficher les arguments de la fonction actuelle
(Pdb)!statement ## Exécuter une instruction
Pour les points d'arrêt, la localisation peut être l'une des suivantes.
(Pdb) b 45 ## Ligne 45 dans le fichier actuel
(Pdb) b file.py:45 ## Ligne 45 dans file.py
(Pdb) b foo ## Fonction foo() dans le fichier actuel
(Pdb) b module.foo ## Fonction foo() dans un module
Ça fonctionne. Lâchez-le!
Félicitations ! Vous avez terminé le laboratoire de débogage. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.