Juste une question de commodité. J'ai été un peu gâté avec les débogueurs dans des IDE tels que Visual Studio et XCode. Je trouve un peu maladroit de devoir taper import pdb; pdb.set_trace()
pour définir un point d'arrêt (je préfère ne pas importer pdb en haut du fichier car je pourrais l'oublier et le laisser).
Existe-t-il un moyen plus simple de définir un point d'arrêt dans le code Python, aussi simple et discret que ce que vous voyez dans un IDE?
Vous pouvez exécuter votre programme dans pdb
à partir de la ligne de commande en exécutant
python -m pdb votre_script.py
Il se cassera sur la 1ère ligne, vous pourrez alors ajouter un point d'arrêt n'importe où dans votre code en utilisant la commande break
, sa syntaxe est la suivante:
b (reak) [[nom du fichier:] lineno | fonction [ condition]]
Il est suffisamment flexible pour vous permettre d'ajouter un point d'arrêt n'importe où.
Vous pouvez utiliser:
from pdb import set_trace as bp
code
code
bp()
code
code
Dans vim, une macro est configurée pour cela (dans mon fichier .vimrc):
map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>
je peux donc appuyer simplement sur\b (en mode Insertion) et il ajoute un point d'arrêt après la ligne actuelle ou sur\B (notez le capital) et en met un avant la ligne actuelle.
ce qui semble bien fonctionner. La plupart des autres éditeurs de programmeurs «simples» (emacs, sublimetext, etc.) devraient avoir des moyens simples similaires de le faire.
Edit: J'ai en fait:
au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>
qui ne l’active que pour les fichiers source Python. Vous pouvez très facilement ajouter des lignes similaires pour JavaScript ou d'autres langues que vous utilisez.
Si vous ne souhaitez pas définir manuellement des points d'arrêt chaque fois que vous exécutez le programme (dans Python 3.2+), par exemple, vous voulez créer directement un point d'arrêt à la ligne 3 et arrêter l'exécution à cet endroit:
python -m pdb -c "b 3" -c c your_script.py
Les informations suivantes peuvent aider:
Si un fichier .pdbrc existe dans le répertoire de base de l'utilisateur ou dans le répertoire en cours, il est lu et exécuté comme s'il avait été saisi à l'invite du débogueur. Ceci est particulièrement utile pour les alias. Si les deux fichiers existent, celui du répertoire de base est lu en premier et les alias qui y sont définis peuvent être remplacés par le fichier local.
Modifié dans la version 3.2: .pdbrc peut désormais contenir des commandes qui continuent le débogage, telles que continue ou suivante. Auparavant, ces commandes n'avaient aucun effet.
Nouveauté de la version 3.2: pdb.py accepte désormais une option -c qui exécute les commandes comme si elles étaient données dans un fichier .pdbrc, voir Commandes du débogueur.
Je ne l'ai pas encore essayé, mais ils viennent d'implémenter un nouveau composant intégré appelé breakpoint () dans Python 3.7, ce qui signifie que vous pouvez insérer un point d'arrêt avec une seule déclaration maintenant:
breakpoint()
Voici comment utiliser pdb dans la ligne de commande sans rien implémenter dans votre code source (la documentation et les autres ressources en ligne ne permettent pas d'expliquer cela à un programmeur qui n'a utilisé que des débogueurs visuels dans le passé):
Démarrez pdb en tapant ce qui suit dans une invite du shell:
python -m pdb 'python_script'
Cette commande initialise pdb et le débogueur pdb se brise à la première ligne de votre script python et attend une entrée de votre part:
(Pdb)
C'est l'interface de communication avec le débogueur. Maintenant, vous pouvez spécifier vos commandes ici. Au lieu d'utiliser des boutons ou des raccourcis clavier dans les débogueurs visuels, vous utiliserez ici des commandes pour obtenir les mêmes résultats.
Vous pouvez aller à la ligne suivante de votre code avec la commande "n" (next):
(Pdb) n
Effectuer une prochaine afficherait le numéro de ligne et le code spécifique dans la source:
> python_script(line number)method name
-> current line in the source code
Vous pouvez définir un point d'arrêt en spécifiant un numéro de ligne dans votre code source.
(Pdb) b 50
Ici, le débogueur est configuré pour rompre à la ligne 50. S'il n'y a pas d'autres points d'arrêt, le point d'arrêt de la ligne 50 sera le premier et il pourra être référencé par l'identifiant du point d'arrêt, qui est 1 dans ce cas. Si vous ajoutez plus de points d'arrêt, ils auront des identifiants séquentiels (c'est-à-dire 2, 3, etc.)
Une fois qu'un point d'arrêt est défini, vous devez continuer à exécuter votre programme jusqu'à ce que pdb atteigne le point d'arrêt comme suit:
(Pdb) c
Une fois que vous atteignez un point d'arrêt, vous pouvez passer à la ligne suivante, avec la commande n décrite précédemment. Si vous souhaitez examiner les valeurs des variables, vous devez exécuter la commande de paramètre comme suit:
(Pdb) p variable_name
Si vous n'avez plus besoin d'un point d'arrêt, vous pouvez le supprimer en transmettant l'id du point d'arrêt à l'aide de la commande clear:
(Pdb) clear 1
Enfin, lorsque vous avez terminé avec le débogueur, vous pouvez quitter l'exécution comme vous le feriez avec l'interpréteur de ligne de commande python.
(Pdb) exit()
J'espère que cela aidera n'importe qui à démarrer avec pdb. Voici une liste de commandes que vous pouvez utiliser avec le débogueur: pdb so question and answers
Vous pouvez utiliser un IDE qui prend en charge le débogage en python ou consulter l'excellent outil Winpdb. Ce qui fonctionne sur n’importe quelle plate-forme et fournit des fonctionnalités de débogage graphique à votre script python.
Vous pouvez utiliser:
Tout ce qui précède prend en charge le débogage python depuis un IDE.
Python 3.7
a un nouveau moyen intégré de définir des points d'arrêt. Appel
breakpoint()
Dans Atom, si les plugins Python sont installés, vous pouvez simplement taper 'pdb
' et appuyer sur Entrée pour que l'extrait de code saisisse import et retrace pour vous.
J'avais l'habitude de le faire maintenant que parfois je le saisis même si je le modifie dans vim et que j'attends que la liste déroulante apparaisse.