web-dev-qa-db-fra.com

Quitter Python Debugger ipdb

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?

33
Joachim

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).

40
Joachim

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.

42
KDN

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.

7
joelostblom

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.

7
Scofield77