3 votes

Comment arrêter le programme Python après pdb.set_trace()

Lors du débogage de scripts en Python (2.7, tournant sous Linux), j'injecte occasionnellement pdb.set_trace() (notez que j'utilise en fait ipdb), par exemple :

import ipdb as pdb
try:
    do_something()
    # Je voudrais examiner certaines variables locales avant d'exécuter do_something_dangerous()
    pdb.set_trace()
except:
    pass
do_something_dangerous()

Je lance généralement mon script depuis le shell, par exemple

python my_script.py

Parfois, lors de ma session de débogage, je réalise que je ne veux pas exécuter do_something_dangerous(). Quel est le moyen le plus simple d'arrêter l'exécution du programme afin que do_something_dangerous() ne soit pas exécuté et que je puisse quitter pour revenir au shell ?

D'après ce que je comprends, en appuyant sur ctrl-d (ou en émettant la commande de sortie du débogueur) va tout simplement quitter ipdb et le programme continuera de s'exécuter (dans mon exemple ci-dessus). Appuyer sur ctrl-c semble déclencher un KeyboardInterrupt mais je n'ai jamais compris le contexte dans lequel il était déclenché.

J'espère trouver quelque chose comme ctrl-q pour simplement arrêter tout le processus, mais je n'ai rien trouvé.

Je sais que mon exemple est très artificiel, mais ma question porte sur la façon d'interrompre l'exécution à partir de pdb lorsque le code en cours de débogage est configuré pour attraper des exceptions. Il ne s'agit pas de restructurer le code ci-dessus pour qu'il fonctionne !

1voto

tzaman Points 13190

De la documentation du module :

q(uit) Quitter le débogueur. Le programme en cours d'exécution est interrompu.

Plus précisément, cela provoquera l'élévation d'une exception BdbQuit lors de l'appel de la prochaine fonction du débogueur.

1voto

nonagon Points 434

J'ai trouvé que ctrl-z pour suspendre le processus python/ipdb, suivi de 'kill %1' pour terminer le processus, fonctionne bien et est raisonnablement rapide à taper pour moi (avec un alias bash k='kill %1'). Je ne suis pas sûr s'il y a quelque chose de plus propre/de plus simple cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X