2016-07-14 5 views
0

Скажем, у меня есть следующие функции:IPython отладчик не предоставляет каких-либо представление о

def simple_func(): 
    a = 4 
    b = 5 
    c = a * b 
    print c 

Вот что я получаю, когда я бегу %debug simple_func():

NOTE: Enter 'c' at the ipdb> prompt to continue execution. 
None 
> <string>(1)<module>() 

ipdb> 

Если я вхожу n отладчик плюет 20 обратно у меня и возвращается None.

Это упрощенная версия того, что происходит через функции, переводчики, машины и т. Д. Что происходит? Почему я не могу заставить какие-либо из моих отладчиков делать то, что я хочу, когда все, что мне нужно, это сделать очень простой пошаговый шаг?

+0

Вы пытались установить точку останова? – cdarke

+0

Да, это не работает –

ответ

2

Не похоже, что debug работает с функцией, которая просто определена в сеансе ipython. Его необходимо импортировать из файла (то есть параметр --breakpoint принимает имя и строку файла).

Если я создаю файл test.py

In [9]: cat test.py 
def simple_func(): 
    a = 4 
    b = 5 
    c = a * b 
    print(c) 

я могу сделать:

In [10]: import test 

In [11]: %debug --breakpoint test.py:1 test.simple_func() 
Breakpoint 1 at /home/paul/mypy/test.py:1 
NOTE: Enter 'c' at the ipdb> prompt to continue execution. 
> /home/paul/mypy/test.py(2)simple_func() 
1  1 def simple_func(): 
----> 2  a = 4 
     3  b = 5 
     4  c = a * b 
     5  print(c) 

ipdb> n 
> /home/paul/mypy/test.py(3)simple_func() 
1  1 def simple_func(): 
     2  a = 4 
----> 3  b = 5 
     4  c = a * b 
     5  print(c) 

ipdb> n 
> /home/paul/mypy/test.py(4)simple_func() 
     2  a = 4 
     3  b = 5 
----> 4  c = a * b 
     5  print(c) 
     6 

ipdb> a,b 
(4, 5) 
ipdb> n 
> /home/paul/mypy/test.py(5)simple_func() 
     2  a = 4 
     3  b = 5 
     4  c = a * b 
----> 5  print(c) 
     6 

ipdb> c 
20 
ipdb> c 
20 
ipdb> q 

Там могут быть и другие способы использования, но это, кажется, самый простой, самый прямой один. Я редко использую отладчик. Вместо этого я тестирую фрагменты кода в интерактивном режиме в Ipython и посыпаю свои сценарии с помощью отладки prints.