J'utilise ipdb assez souvent de manière à simplement passer à un morceau de code qui est isolé c'est-à-dire qu'il est difficile d'écrire un vrai script qui l'utilise. Au lieu de cela, j'écris un scénario de test minimal avec moquerie et je m'y lance.
Exemple pour le workflow:
def func():
...
import ipdb
ipdb.set_trace()
...
def test_case():
...
func()
...
Ensuite, invoquez
py.test test_file.py -s -k test_case
Maintenant, je vérifie généralement une ou deux variables, puis je veux quitter. Modifiez le code et recommencez.
Comment arrêter? Le manuel indique que q
quitte le débogueur. Ce n'est pas (vraiment). Vous devez quitter plusieurs fois avant la fin du débogueur. Le même comportement pour Ctrl-C et Ctrl-D (avec la frustration supplémentaire qu'appuyer plusieurs fois sur Ctrl-D finit également par quitter le terminal).
Existe-t-il un moyen intelligent de forcer l'arrêt? Ce flux de travail est-il même raisonnable? Quelle est la manière standard de procéder?
Je mets ce qui suit dans mon .pdbrc
import os
alias kk os.system('kill -9 %d' % os.getpid())
kk
tue le débogueur et (le processus qui déclenche le débogueur).
Ce qui suit a fonctionné pour moi:
import sys
sys.exit()
Sur les versions plus récentes d'ipython, comme mentionné ci-dessus et ci-dessous, cela ne fonctionne pas. Dans ce cas,
import os
os._exit(0)
devrait encore faire l'affaire.
Comme mentionné dans une autre réponse, il s'agissait d'un bogue dans IPython 5.1. Il a été corrigé dans cette demande de tirage et n'est plus un problème à partir d'IPython 5.2. Vous pouvez maintenant utiliser q
, quit()
ou Ctrl+d pour quitter le débogueur.
C'est le problème avec la version récente d'IPython 5.1.0. Vous pouvez vérifier avec votre environnement à l'aide du code suivant:
pip freeze | egrep -i '^i'
Il sera résolu par une mise à niveau vers IPython == 5.0.0.
pip install ipython==5.0.0
Ça marche pour moi.