Question

Dans pdb l'instruction ne next pas un pas sur la liste compréhensions, au lieu de cela les étapes à travers chaque itération. Y at-il un moyen d'enjamber le débogage continuera donc à la ligne suivante après la compréhension de la liste?

J'ai dû recourir à la liste du code, la fixation d'un point d'arrêt à la ligne suivante, et puis en continuant l'exécution au point d'arrêt suivant. Ceci est ennuyeux et je me suis dit qu'il doit y avoir une façon meilleure.

Était-ce utile?

La solution

Vous pouvez utiliser la commande until. Sortie de help until en pdb:

UNT (il)
Poursuivre l'exécution jusqu'à la ligne avec un nombre plus grand que le courant une est atteinte ou jusqu'à ce que les rendements de trame courante

Autres conseils

Élaborant sur la réponse de Sven que je devais décrire until et next à un collègue récemment. Il n'est pas spécifique à la compréhension de la liste qui est stuck avec la prochaine, mais pour les boucles en général:.

until commande est comme next, sauf qu'il continue explicitement jusqu'à ce que l'exécution atteint une ligne dans la même fonction avec un numéro de ligne supérieure à la valeur actuelle.

Ce qui signifie que vous pouvez passer par-dessus des boucles avec until

Juste pour couvrir step et next complet:

step commande est utilisée pour exécuter la ligne en cours, puis arrêter au prochain point d'exécution

Ce qui signifie qu'il sera instruction par instruction. Note concaténer instrucitons avec ; sera traitée comme une instruction.

var A=0; var B=0 #Note: that will count as one instruction

La commande suivante est comme étape, mais ne pénètre pas dans les fonctions appelées de l'instruction en cours d'exécution. En effet, il les étapes tout au long de l'appel de fonction à l'instruction suivante dans la fonction actuelle en une seule opération.

Le next aide à sauter par-dessus plusieurs instructions, en fonction de multiples définitions de variables il sauter par-dessus tous.

Voici un exemple qui illustre le scénario:

Exemple: pdb_until.py

aVar = 3
x = [i for i in range(0,30)]
bVar = 5

L'exécution de cette avec PDB:

python -m pdb pdb_until.py

Lance notre session interactive:

> pdb_until.py(1)<module>()
-> aVar = 3
(Pdb) step                #our Input, we step
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, next
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) next                #our Input, we are now stuck on line 2
> pdb_until.py(2)<module>()
-> x = [i for i in range(0,10)]
(Pdb) until               #our Input, until steps over (runs list comp)

Source : La bibliothèque standard Python par exemple, Doug Hellmann

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top