Une façon plus simple de mettre les points D'arrêt PDB en code Python?

juste une question de convenance. J'ai été un peu gâté avec les débogueurs D'IDEs comme Visual Studio et XCode. Je trouve un peu maladroit d'avoir à taper import pdb; pdb.set_trace() pour définir un point de rupture (je préfère ne pas importer pdb en haut du fichier car je pourrais l'oublier et le laisser dedans).

y a-t-il une façon plus simple de définir un point de rupture en code Python, aussi simple et discrète que ce que vous voyez dans un IDE?

79
demandé sur Martijn Pieters 2011-08-08 14:24:14

10 réponses

vous pouvez exécuter votre programme dans pdb depuis la ligne de commande en exécutant

python-m pdb your_script.py

il se cassera sur la première ligne, puis vous pourrez ajouter un point de rupture où que vous voulez dans votre code en utilisant la commande break , sa syntaxe est:

b (reak) [[nom du fichier:]lineno | function[, condition]]

il est suffisamment souple afin de vous donner la possibilité d'ajouter un point d'arrêt n'importe où.

95
répondu mdeous 2016-12-23 16:00:51

vous pouvez utiliser:

from pdb import set_trace as bp

code
code
bp()
code
code
40
répondu Apogentus 2015-02-24 13:56:53

Dans vim, j'ai une macro mis en place pour cela (dans mon .fichiers vimrc):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

pour que je puisse simplement appuyer sur \b (quand il n'est pas en mode Insertion) et il ajoute un point de rupture après la ligne courante, ou \B (notez le capital) et il place un avant la ligne courante.

qui semble bien fonctionner. La plupart des autres éditeurs de programmeurs "simples" (emacs, sublimetext, etc.) devraient avoir les mêmes méthodes faciles pour 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.

30
répondu Daniel 2014-08-06 16:18:09

si vous ne voulez pas définir manuellement les points de rupture à chaque exécution du programme (en Python 3.2+), par exemple, dites que vous voulez créer directement un point de rupture à la ligne 3 et y arrêter l'exécution:

python -m pdb -c "b 3" -c c your_script.py

, Les informations suivantes peuvent vous aider:

si un fichier .pdbrc existe dans le répertoire home de l'utilisateur ou dans le répertoire courant, il est lu et exécuté comme s'il avait été tapé à la débogueur invite. Ceci est particulièrement utile pour les alias. Si les deux fichiers existent, celui du répertoire principal est lu en premier et les alias définis peuvent être dépassés par le fichier local.

modifié dans la version 3.2:.pdbrc peut maintenant contenir des commandes qui continuent le débogage, comme continue ou next. Auparavant, ces commandes n'avaient aucun effet.

Nouveau dans la version 3.2: pdb.py accepte maintenant l'option-c qui exécute les commandes comme si dans un .fichier pdbrc, voir Commandes Du Débogueur.

16
répondu AXO 2018-02-23 19:00:54

C'est ainsi que vous utiliseriez pdb en ligne de commande sans implémenter quoi que ce soit dans votre code source (la documentation et d'autres ressources en ligne ne font pas un bon travail en expliquant cela à un programmeur qui n'a utilisé que des débogueurs visuels dans le passé):

commencer pdb en tapant ce qui suit dans un prompt shell:

python -m pdb 'python_script'

cette commande initialise pdb et le débogueur pdb se cassera à la première ligne de votre python_script et attendra une entrée de vous:

(Pdb)

c'est l'interface pour communiquer avec le débogueur. Vous pouvez maintenant spécifier vos commandes ici. Contrairement à l'utilisation de boutons ou de raccourcis clavier dans les débogueurs visuels, vous utiliserez ici des commandes pour obtenir les mêmes résultats.

vous pouvez passer à la ligne suivante de votre code par la commande "n" (suivant):

(Pdb) n

L'exécution d'un prochain affichera le numéro de ligne, et le code spécifique dans le source:

> python_script(line number)method name
-> current line in the source code

vous pouvez définir un point de rupture en spécifiant un numéro de ligne dans votre code source.

(Pdb) b 50

ici, le débogueur est réglé sur la ligne 50. S'il n'y a pas d'autres points de rupture, le point de rupture à la ligne 50 sera le premier et il pourrait être référencé par l'id du point de rupture qui est 1 dans ce cas. Si vous ajoutez plus de points de rupture, ils obtiendront des identificateurs séquentiellement (c.-à-d. 2, 3, etc.)

une fois a le point de rupture est défini, vous continuerez à exécuter votre programme jusqu'à ce que pdb atteigne le point de rupture comme suit:

(Pdb) c

une fois que vous arrivez à un point de rupture, vous pouvez passer à la ligne suivante, avec la commande n comme décrit ci-dessus. Si vous voulez examiner les valeurs des variables, vous exécuterez la commande parameter comme suit:

(Pdb) p variable_name

si vous n'avez plus besoin d'un point de rupture, vous pouvez le dégager en passant dans l'id du point de rupture avec le clair commande:

(Pdb) clear 1

enfin, lorsque vous avez terminé avec le débogueur, vous pouvez quitter l'exécution comme vous sortiriez de l'interpréteur en ligne de commande python.

(Pdb) exit()

j'espère que cela aidera n'importe qui à commencer avec l'APB. Voici une liste des commandes que vous pouvez utiliser avec le débogueur: pdb donc questions et réponses

9
répondu picmate 涅 2018-02-19 20:16:25

vous pouvez utiliser un IDE qui supporte le débogage python, ou vous pouvez consulter L'excellent outil Winpdb. Qui fonctionne sur n'importe quelle plate-forme et fournit des facilités de débogage graphique à votre script python.

http://winpdb.org /

4
répondu Glenjamin 2011-08-08 10:26:01

Je ne l'ai pas encore essayé mais ils viennent de mettre en œuvre un nouveau intégré appelé breakpoint () en python 3.7 qui signifie que vous pouvez insérer un breakpoint avec une déclaration maintenant:

breakpoint()
3
répondu Bill 2018-03-23 00:26:33

vous pouvez utiliser:

  • wing ide
  • eclipse avec le plugin pydev
  • pycharms

Tout ce qui précède supporte le débogage python depuis un IDE.

2
répondu vvatsa 2011-08-08 10:30:05

dans Atom si les plugins Python sont installés, vous pouvez simplement taper ' pdb " et frapper enter et le snippet Tapera import et trace en arrière pour vous.

j'ai l'habitude maintenant que parfois je le tape même si je l'édite dans vim et en attendant que le dropdown apparaisse.

0
répondu Simplex 2017-05-14 01:40:09

la façon la plus simple d'exécuter le débogueur sur votre script est juste

pdb your_script.py

exécuter pdb sur une ligne de commande Linux donne

usage: pdb.py scriptfile [arg] ...
-1
répondu timbo 2014-02-07 06:43:36