Comme je le sais, %debug magic
peut effectuer un débogage dans une cellule.
Cependant, j'ai des appels de fonction sur plusieurs cellules.
Par exemple,
In[1]: def fun1(a)
def fun2(b)
# I want to set a breakpoint for the following line #
return do_some_thing_about(b)
return fun2(a)
In[2]: import multiprocessing as mp
pool=mp.Pool(processes=2)
results=pool.map(fun1, 1.0)
pool.close()
pool.join
Ce que j'ai essayé:
J'ai essayé de définir %debug
dans la première ligne de la cellule-1. Mais il entre immédiatement en mode débogage, même avant l'exécution de la cellule 2.
J'ai essayé d'ajouter %debug
dans la ligne juste avant le code return do_some_thing_about(b)
. Mais alors le code fonctionne pour toujours, ne s'arrête jamais.
Quelle est la bonne façon de définir un point de rupture dans le cahier ipython?
Utilisez ipdb
Installez-le via
pip install ipdb
Usage:
In[1]: def fun1(a):
def fun2(a):
import ipdb; ipdb.set_trace() # debugging starts here
return do_some_thing_about(b)
return fun2(a)
In[2]: fun1(1)
Pour exécuter une utilisation ligne par ligne n et pour entrer dans une utilisation de la fonction s et quitter le débogage c.
Pour une liste complète des commandes disponibles: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf
Vous pouvez utiliser ipdb
inside jupyter avec:
from IPython.core.debugger import Tracer; Tracer()()
Edit : les fonctions ci-dessus sont obsolètes depuis IPython 5.1. C'est la nouvelle approche:
from IPython.core.debugger import set_trace
Ajoutez set_trace()
où vous avez besoin d'un point d'arrêt. Tapez help
pour les commandes ipdb
lorsque le champ de saisie apparaît.
Votre fonction de retour est en ligne de la fonction def (fonction principale), vous devez lui donner un onglet .
%%debug
au lieu de
%debug
pour déboguer la cellule entière non seulement en ligne. J'espère que cela vous aidera.
Vous pouvez toujours ajouter ceci dans n'importe quelle cellule:
import pdb; pdb.set_trace()
et le débogueur s'arrêtera sur cette ligne. Par exemple:
In[1]: def fun1(a):
def fun2(a):
import pdb; pdb.set_trace() # debugging starts here
return fun2(a)
In[2]: fun1(1)
Il suffit de taper import pdb
dans le cahier jupyter, puis d’utiliser ce cheatsheet pour déboguer. C'est très pratique.
c
-> continuer, s
-> step, b 12
-> définir le point d'arrêt à la ligne 12 et ainsi de suite.
Quelques liens utiles: Document officiel Python sur pdb , Exemples de débogueur Python pdb pour mieux comprendre comment utiliser les commandes du débogueur .
La commande magique %pdb
est également utile. Il suffit de dire %pdb on
et par la suite le débogueur pdb
s'exécutera sur toutes les exceptions, quelle que soit la profondeur de la pile d'appels. Très utile.
Si vous souhaitez déboguer une ligne particulière, il vous suffit de déclencher une exception (vous l'avez déjà souvent!) Ou d'utiliser la commande magique %debug
proposée par d'autres personnes.
Dans Python 3.7, vous pouvez utiliser breakpoint () function. Il suffit d'entrer
breakpoint()
où que vous vouliez que l'exécution s'arrête et à partir de là, vous pouvez utiliser les mêmes commandes pdb (r, c, n, ...) ou évaluer vos variables.
Après avoir obtenu une erreur, dans la cellule suivante, exécutez simplement %debug
et le tour est joué.
Je viens de découvrir PixieDebugger . Même si je n'ai pas encore eu le temps de le tester, il semble vraiment que la façon la plus similaire de déboguer telle que nous l'utilisons dans ipython avec ipdb
Il a également un onglet "évaluer"