En Java/C #, vous pouvez facilement parcourir le code pour identifier les problèmes éventuels et les IDE rendent ce processus très convivial.
Pouvez-vous suivre le code python de la même manière?
Oui! Il existe un débogueur Python appelé pdb
rien que pour ça!
Vous pouvez lancer un programme Python via pdb
en utilisant pdb myscript.py
ou python -m pdb myscript.py
.
Vous pouvez ensuite exécuter quelques commandes, qui sont décrites dans la page pdb
.
Certains utiles à retenir sont:
b
: définir un point d'arrêtc
: continue le débogage jusqu'à ce que vous atteigniez un point d'arrêts
: parcourir le coden
: pour aller à la ligne suivante du codel
: liste le code source du fichier actuel (par défaut: 11 lignes, y compris la ligne en cours d'exécution)u
: naviguer dans un cadre de piled
: naviguer dans un cadre de pilep
: pour imprimer la valeur d'une expression dans le contexte actuelSi vous ne souhaitez pas utiliser un débogueur de ligne de commande, certains IDE tels que Pydev ont un débogueur d'interface graphique.
La première étape consiste à faire en sorte que l'interpréteur Python passe en mode débogage.
A. À partir de la ligne de commande
Voie la plus simple, depuis la ligne de commande, de l'interpréteur python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Au sein de l'interprète
Tout en développant les premières versions de modules et de l'expérimenter de manière plus itérative.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. Dans votre programme
Pour un grand projet et un module long, vous pouvez lancer le débogage depuis le programme en utilisant import pdb et set_trace () Comme ceci:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __== '__main__':
MyObj(5).go()
Le débogage pas à pas pour aller dans plus interne
Exécutez l'instruction suivante… avec “n” (next)
Répéter la dernière commande de débogage… avec ENTREZ
Tout quitter… avec “q” (quitter)
Imprimer la valeur des variables… avec “p” (print)
a) p a
Désactiver l'invite (Pdb)… avec “c” (continuer)
Voir où vous êtes… avec “l” (liste)
Entrer dans les sous-programmes… avec “s” (pas à pas)
Continuer… mais juste jusqu'à la fin du sous-programme actuel… avec “r” (retour)
Attribuer une nouvelle valeur
a) ! b = "B"
Définir un point d'arrêt
a) pause linge
b) break functionname
c) break nomfichier: linumber
Point d'arrêt temporaire
a) numéro de lin tbreak
Point d'arrêt conditionnel
a) numéro de linge en pause, état
Note: ** Toutes ces commandes doivent être exécutées à partir de ** pdb
Pour une connaissance approfondie, voir: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Il existe un module appelé 'pdb' en python. Au sommet de votre script python, vous faites
import pdb
pdb.set_trace()
et vous entrerez en mode débogage. Vous pouvez utiliser 's' pour vous déplacer, 'n' pour suivre la ligne suivante, comme vous le feriez avec le débogueur 'gdb'.
À partir de Python 3.7, vous pouvez utiliser la fonction intégrée breakpoint()
pour entrer dans le débogueur:
foo()
breakpoint() # drop into the debugger at this point
bar()
Par défaut, breakpoint()
importera pdb
et appellera pdb.set_trace()
. Cependant, vous pouvez contrôler le comportement du débogage via sys.breakpointhook()
et utiliser la variable d'environnement PYTHONBREAKPOINT
.
Voir PEP 553 pour plus d’informations.
Si vous voulez un IDE avec un débogueur intégré, essayez PyScripter .
Il existe de nos jours la méthode breakpoint()
, qui remplace import pdb; pdb.set_trace()
.
Il a également plusieurs nouvelles fonctionnalités , telles que les variables d’environnement possibles.
ipdb ajoute la fonctionnalité IPython à pdb, offrant les améliorations énormes suivantes:
L'utilisation est analogue à pdb
, il suffit de l'installer avec:
python3 -m pip install --user ipdb
puis ajoutez à la ligne que vous souhaitez utiliser le débogage:
__import__('ipdb').set_trace(context=21)
Vous voudrez probablement ajouter un raccourci pour cela à partir de votre éditeur, par exemple. pour Vim snipmate j'ai:
snippet ipd
__import__('ipdb').set_trace(context=21)
afin que je puisse taper simplement ipd<tab>
et il se développe au point d'arrêt. Ensuite, il est facile de le supprimer avec dd
car tout est contenu dans une seule ligne.
context=21
augmente le nombre de lignes de contexte, comme expliqué à: Comment puis-je faire en sorte que ipdb affiche plus de lignes de contexte pendant le débogage?
Vous pouvez également déboguer des programmes depuis le début avec:
ipdb3 main.py
mais vous ne voulez généralement pas faire cela parce que:
Ou alternativement, comme dans raw pdb 3.2+, vous pouvez définir des points d'arrêt à partir de la ligne de commande:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
bien que -c c
soit cassé pour une raison quelconque: https://github.com/gotcha/ipdb/issues/156
La complétion par tabulation fonctionne alors avec Tab
comme dans IPython.
Tout comme pdg, ipdb est encore loin d’être parfait et complètement rudimentaire par rapport à GDB, mais c’est déjà une énorme amélioration par rapport à pdb.
python -m module
le débogage a été demandé à l'adresse: Comment déboguer un module Python exécuté avec python -m à partir de la ligne de commande? et puisque Python 3.7 peut être fait avec:
python -m pdb -m my_module
Caractéristiques manquantes graves de pdb et ipdb par rapport à GDB:
Testé sous Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
Visual Studio avec PTVS pourrait être une option pour vous: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
Il est également possible de suivre et de parcourir par code le code python (et sa simplicité!) Consultez la documentation sys.settrace () pour plus de détails. Aussi ici est un tutoriel pour vous aider à démarrer.
https://wiki.python.org/moin/PythonDebuggingTools
pudb est un bon remplaçant pour pdb
Python Tutor est un débogueur en ligne à étape unique. Vous pouvez mettre du code sur la page edit puis cliquer sur "Visualiser l'exécution" pour le lancer.
PyCharm est un IDE pour Python qui inclut un débogueur. Regardez cette vidéo sur YouTube pour une introduction à l'utilisation du débogueur de PyCharm pour parcourir le code.
Tutoriel PyCharm - Déboguer du code python avec PyCharm
Remarque: ceci n'est pas destiné à être une approbation ou une révision. PyCharm est un produit commercial payant, mais la société fournit une licence gratuite aux étudiants et aux enseignants, ainsi qu'une version "allégée" de la communauté, gratuite et à code source ouvert.