2015-09-11 1 views
4

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"'?

Répondre

5

Essayez dans votre ipython:

import pdb 
def test_pdb_example(): 
    a = "aaa" 
    pdb.set_trace() # use 'n' for navigate to next line 
    b = "bbb" 
    c = "ccc" 
    final = a + b + c 
    return final 

test_pdb_example() 
+0

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

+0

@ 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. –

+0

Est-ce un «bug» ou une fonctionnalité? – Timo