Pouvez-vous passer à travers le code python pour aider à déboguer les problèmes?

en java / C# vous pouvez facilement passer à travers le code pour tracer ce qui pourrait aller mal, et les IDE rendent ce processus très convivial.

pouvez-vous tracer à travers le code python de façon similaire?

119
demandé sur codeforester 2011-02-08 06:21:42

11 réponses

Oui! Il y a un débogueur Python appelé pdb juste pour faire ça!

vous pouvez lancer un programme Python via pdb en utilisant pdb myscript.py ou python -m pdb myscript.py .

il y a quelques commandes que vous pouvez ensuite émettre, qui sont documentées sur la page pdb ".

quelques-unes utiles à retenir sont:

  • b : ensemble a point de rupture
  • c : continuez le débogage jusqu'à ce que vous atteigniez un point de rupture
  • s : entrez le code
  • n : pour passer à la ligne suivante du code
  • l : liste du code source du fichier courant (par défaut: 11 lignes, y compris la ligne en cours d'exécution)
  • u : naviguer vers le haut d'un cadre de pile
  • d : naviguer vers le bas un cadre de pile
  • p : pour imprimer la valeur d'une expression dans le contexte actuel

si vous ne voulez pas utiliser un débogueur en ligne de commande, certains IDEs comme Pydev ont un débogueur GUI.

176
répondu Rovin Bhandari 2014-02-06 14:19:02

en utilisant le débogueur interactif Python "pdb"

la première étape est de faire l'interpréteur Python pour entrer dans le mode de débogage.

A. de la ligne de commande

Plus simple, fonctionnant à partir de 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. De Votre Programme

pour un grand projet et un module de longue durée, peut démarrer le débogage de l'intérieur du programme en utilisant importer apb 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 __name__ == '__main__':
    MyObj(5).go()

débogage étape par étape pour entrer dans plus interne

  1. Exécuter l'instruction suivante... avec "n" (suivant)

  2. répétant la dernière commande de débogage... avec entrer

  3. J'arrête tout... avec " q " (j'arrête)

  4. Imprimer la valeur des variables... avec" p "(imprimer)

    un) p

  5. mise hors tension de l' (Apb) invite... avec "c" (continuer)

  6. voir où vous en êtes ... avec " l " (liste)

  7. Marcher dans les sous-programmes... avec "s" (étape en)

  8. Continue... mais juste à la fin de la sous-programme actuel ... avec " r " (retour)

  9. attribuer une nouvelle valeur

    a) !b = " B "

  10. Définir un point d'arrêt

    a) pause linenumber

    b) pause functionname

    c) casser nom de fichier:linenumber

  11. point de rupture temporaire

    a) tbreak linenumber

  12. point de rupture conditionnel

    a) pause linenumber, la condition

Note: * * toutes ces commandes doivent être exécutées à partir de * * pdb

pour connaissance approfondie, voir: -

https://pymotw.com/2/pdb /

https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python /

34
répondu akD 2016-08-25 09:38:01

il y a un module appelé " pdb " en python. En haut de votre script python vous faites

import pdb
pdb.set_trace()

et vous passerez en mode débogage. Vous pouvez utiliser' s 'pour step,' n 'pour suivre la ligne suivante similaire à ce que vous feriez avec' gdb ' debugger.

31
répondu Senthil Kumaran 2011-02-08 03:24:35

si vous venez de Java/C# background je suppose que votre meilleur pari serait d'utiliser Eclipse avec Pydev . Cela vous donne un IDE entièrement fonctionnel avec un débogueur intégré. Je l'utilise avec django.

3
répondu Liorsion 2012-01-20 15:24:54

si vous voulez un IDE avec débogueur intégré, essayez PyScripter .

2
répondu kindall 2011-02-08 03:52:44

à partir de Python 3.7, vous pouvez utiliser la fonction breakpoint() intégrée 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 de débogage via sys.breakpointhook() et l'utilisation de la variable d'environnement PYTHONBREAKPOINT .

Voir PEP 553 pour plus d'informations.

2
répondu Eugene Yarmash 2018-08-27 13:47:36

par programmation pas à pas et la traçabilité par code python est aussi possible (et facile!). Regardez le système .setrace () pour plus de détails. Aussi ici est un tutoriel pour vous aider à démarrer.

1
répondu Sandeep Datta 2014-04-12 09:58:15
1
répondu Aaron Hoffman 2014-08-19 18:50:21

https://wiki.python.org/moin/PythonDebuggingTools

pudb est une bonne baisse-dans le remplacement pour apb

1
répondu Neil 2015-08-26 13:32:09

PyCharm est un IDE pour Python qui inclut un débogueur. Regardez cette vidéo sur YouTube pour une introduction sur l'utilisation du débogueur de PyCharm pour passer à travers le code.

Tutorial PyCharm-déboguer le code python en utilisant PyCharm

Note: il ne s'agit pas d'une approbation ou d'un examen. PyCharm est un produit commercial que l'on doit payer pour, mais la société ne fournira gratuitement une licence pour les étudiants et les enseignants, ainsi que d'un version communautaire "légère" qui est libre et open-source.

Screenshot

0
répondu jim 2018-07-19 21:05:40

vous pouvez regarder débogueur python qui fait exactement ce que vous cherchez seulement pas à travers une interface graphique

-1
répondu Nigel 2011-02-08 03:26:45