web-dev-qa-db-fra.com

Comment quitter pdb et permettre au programme de continuer?

J'utilise le module pdb pour déboguer un programme. J'aimerais comprendre comment je peux sortir de pdb et permettre au programme de continuer jusqu'à son terme. Le programme est coûteux en termes d’exécution, aussi je ne veux pas quitter sans que le script tente de s’achever. continue ne semble pas fonctionner. Comment puis-je quitter pdb et continuer mon programme?

81
turtle

continue devrait "Continuer l'exécution, ne s'arrêter que lorsqu'un point d'arrêt est rencontré", afin que vous ayez un point d'arrêt défini quelque part. Pour supprimer le point d'arrêt (si vous l'avez inséré manuellement):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

Ou, si vous utilisez pdb.set_trace(), vous pouvez essayer ceci (bien que si vous utilisez pdb de manière plus sophistiquée, cela peut casser des choses ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!
153
voithos

Un simple Ctrl-D va sortir de pdb. Si vous voulez continuer plutôt que de casser, appuyez simplement sur c plutôt que la totalité de la commande continue

17
Minh Triet

Le réponse de @voithos est correct, je vais donc ajouter une alternative dans le cas où vous utilisez set_trace. Oui le pdb.set_trace = lambda: None hack fonctionne correctement, mais pas si vous avez défini d’autres points d’arrêt et souhaitez les réactiver ultérieurement. Pour moi, cela indique le fait qu'il manque malheureusement à pdb de nombreuses fonctionnalités (même des éléments de base, comme des listes d'affichage), ce qui est un autre cas.

La bonne nouvelle est que pdb++ est un excellent remplaçant pour pdb, et une des choses qu’il résout est le problème de la désactivation de set_trace. Donc vous pouvez simplement faire:

pip install pdbpp

puis au (Pdb++) Invite, tapez:

pdb.disable()

Si vous souhaitez réactiver ultérieurement, cela fonctionne sans surprise:

pdb.enable()

Facile! Et vous obtiendrez beaucoup d'autres choses utiles en plus de cela.

4
Adam Spiers

Si vous souhaitez vraiment quitter le débogueur, vous devez exécuter une opération telle que WinPdb , qui vous permet de vous déconnecter du processus, puis de quitter le débogueur, (N.B. il est multi-plateforme).

Si vous souhaitez continuer le débogage mais ne vous arrêtez plus à un point d'arrêt donné, vous devez:

  1. Notez le numéro du point d'arrêt (ou le numéro du fichier et de la ligne),
  2. Non plus cl bp_number ouclear file:line pour supprimer définitivement le point d'arrêt ou disable pb_number pour le désactiver mais pouvoir le faire revenir en arrière.
  3. Ensuite, continue et votre programme s'exécutent jusqu'au prochain différent le point d'arrêt est atteint.

Pour plus de détails sur ce qui précède, voir le manuel .

4
Steve Barnes