Voir :
Voir https://docs.python.org/fr/3/library/pdb.html
Insérer
import pdb; pdb.set_trace()
Ou lancer le programme en mode debug sans modifier le code
python2 -m pdb /usr/local/bin/plop.py
b pour Breakpoint \ Ajout un point d'arrêt ou liste les points d'arrêt
l ou ll \ Affiche une portion du code
cl(ear) \ Clear breakpoint
p ou pp \ Affiche la valeur d'une variable
! statement \ Executer du code Python. Dans bien des cas le ! pourra être omis
s(tep) \ Exécute la ligne en cours, s'arrête à la première occasion possible (soit dans une fonction qui est appelée, soit sur la ligne suivante de la fonction courante).
n(ext) \ La différence entre next et step est que step s'arrête dans une fonction appelée, tandis que next exécute les fonctions appelées à (presque) pleine vitesse
restart \ Redémarrer le programe Python débugé.
quit \
(Pdb) b plop:49
Breakpoint 1 at /usr/local/bin/plop.py:49
(Pdb) r
> /usr/local/bin/plop.py(49)__init__()
-> self.root_wrappers = root_wrappers
(Pdb) p self.svcid
'event-abcd'
(Pdb) self.svcid='event-abcdef'
(Pdb) p self.svcid
'event-abcdef'
(Pdb) r
--Return--
> /usr/local/bin/plop.py(50)__init__()->None
-> self.pwd = pwd.getpwnam(self.svcid)
(Pdb) p self.svcid
'event-abcdef'
(Pdb) r
KeyError: 'getpwnam(): name not found: event-abcdef'
> /usr/local/bin/plop.py(283)fetch_svcids()
-> return [CronTab(site, svcid['nom'], svcid['active'], options, env, root, template_wrapper, root_wrappers) for svcid in svcids]
(Pdb) p [CronTab(site, svcid['nom'], svcid['active'], options, env, root, template_wrapper, root_wrappers) for svcid in svcids]
*** KeyError: KeyError('getpwnam(): name not found: event-abcdef',)
(Pdb) self.svcid='event-abcd'
*** NameError: name 'self' is not defined
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at /usr/local/bin/plop.py:49
breakpoint already hit 1 time
(Pdb) restart
Restarting /usr/local/bin/plop.py with arguments:
> /usr/local/bin/plop.py(6)<module>()
-> """
pip install ipdb
import ipdb; ipdb.set_trace()
python -m trace --trace somefile.py