J'essaie d'apprendre pdb en utilisant this tutorial référencé par another stackoverflow question, et je suis sur la 3ème étape de la section Mise en route.'n' dans pdb me déplace à l'intérieur de la méthode pdb.set_trace()
In [12]: %paste
# epdb1.py -- experiment with the Python debugger, pdb
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final
## -- End pasted text --
--Return--
> <ipython-input-12-48afa1c7ad72>(4)<module>()->None
-> pdb.set_trace()
(Pdb) l
1 # epdb1.py -- experiment with the Python debugger, pdb
2 import pdb
3 a = "aaa"
4 -> pdb.set_trace()
5 b = "bbb"
6 c = "ccc"
7 final = a + b + c
8 print final
[EOF]
(Pdb) n
> /Users/jg/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py(3038)run_code()
-> sys.excepthook = old_excepthook
(Pdb) l
3033 self.hooks.pre_run_code_hook()
3034 #rprint('Running code', repr(code_obj)) # dbg
3035 exec(code_obj, self.user_global_ns, self.user_ns)
3036 finally:
3037 # Reset our crash handler in place
3038 -> sys.excepthook = old_excepthook
3039 except SystemExit as e:
3040 if result is not None:
3041 result.error_in_exec = e
3042 self.showtraceback(exception_only=True)
3043 warn("To exit: use 'exit', 'quit', or Ctrl-D.", level=1)
Il ressemble à n (ext) devrait me déplacer à la ligne suivante dans le cadre actuel:
(Pdb) help next
n(ext)
Continue execution until the next line in the current function
is reached or it returns.
et semble faire avec succès dans l'exemple du tutoriel. Mais dans mon ipython, il semble que je me déplace vers la ligne suivante dans le code pdb.set_trace().
Comment naviguer simplement vers la ligne 'b = "bbb"'?
Cela fonctionne parfaitement pour moi. Comment puis-je obtenir ce travail sans l'envelopper dans une fonction, et quel est le problème quand il n'est pas emballé? – user1956609
@ user1956609 Pour autant que je sache, lorsque vous appelez pdb.set_trace(), il va essayer d'exécuter sys._getframe(). F_back(). Si votre code n'est pas encapsulé dans une fonction, sys._getframe(). F_back() déclenche une exception. –
Est-ce un «bug» ou une fonctionnalité? – Timo