Каков правильный способ отладки в ноутбуке iPython?
Как я знаю,% debug magic может выполнять отладку в одной ячейке.
Однако у меня есть вызовы функций через несколько ячеек.
Например,
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
Что я пробовал:
-
Я попытался установить% debug в первой строке ячейки-1. Но он сразу же переходит в режим отладки, даже перед выполнением ячейки-2.
-
Я попытался добавить% debug в строку прямо перед кодом "return do_some_thing_about (b)". Но тогда код запускается вечно, никогда не останавливается.
Каков правильный способ установки точки прерывания в ноутбуке ipython?
Ответы
Ответ 1
Используйте ipdb
Установите его через
pip install ipdb
Использование:
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)
Для выполнения строки за строкой используйте n и для перехода в функцию используйте s и для выхода из приглашения отладки используйте c.
Полный список доступных команд: http://frid.github.io/blog/2014/06/05/python-ipdb-cheatsheet/
Ответ 2
Вы можете использовать ipdb
внутри jupyter с помощью:
from IPython.core.debugger import Tracer; Tracer()()
Изменить: перечисленные выше функции устарели с IPython 5.1. Это новый подход:
from IPython.core.debugger import set_trace
Добавьте set_trace()
, где вам нужна точка останова. Введите help
для команд ipdb
, когда появится поле ввода.
Ответ 3
Ваша функция возврата находится в строке функции def (основная функция), вы должны дать ей одну вкладку.
И используйте
%%debug
вместо
%debug
для отладки всей ячейки не только строки. Надеюсь, возможно, это поможет вам.
Ответ 4
Вы всегда можете добавить это в любую ячейку:
import pdb; pdb.set_trace()
и отладчик остановится на этой строке. Например:
In[1]: def fun1(a):
def fun2(a):
import pdb; pdb.set_trace() # debugging starts here
return fun2(a)
In[2]: fun1(1)
Ответ 5
Просто введите import pdb
в блокнот jupyter, а затем используйте cheatsheet для отладки. Это очень удобно.
c
→ continue, s
→ step, b 12
→ установить точку прерывания в строке 12 и т.д.
Некоторые полезные ссылки: Официальный документ Python на pdb, Примеры отладчика python pdb для лучшего понимания того, как для использования команд отладчика.
Некоторые полезные скриншоты:
![введите описание изображения здесь]()