Советы отладки в Jupyter от мученика
Чтобы сильно облегчить себе жизнь при программировании на сервере с Jupyter, запомните эти рекомендации по отладке. Рассмотрим несколько кейсов:
- пошаговое исполнение программы, состоящей из набора py файлов
- отладка участка с произвольной точки останова в блокноте
- пошаговое исполнение отдельной функции
Отладка программы
В первом случае удобно запустить сценарий на Python в отдельном блокноте. При этом установить точку останова можно как посредством запуска сценария с флагом -d, так и поставив set_trace в нужном месте.
%run -d имя.py
После автоматического входа в отладчик на произвольную строку можно перейти с помощью команд:
b номер_строки c
Первая команда устанавливает в строчке точку останова, а вторая продолжает исполнение до нее.
Альтернативным способом является разметка исследуемых участков программы строками вида:
import pdb;pdb.set_trace()
и обычный запуск:
%run имя.py
Отладка участка в блокноте
В соответствии с особенностями работы отладчика со стеком вызовов потребуется заключить код в блок if или функцию и перед исследуемой строкой набрать
import pdb;pdb.set_trace()
а затем запустить ячейку на исполнение
Также можно команды вызова отладчика обернуть в функцию set_trace, которую хранить в одной из верхних ячеек и запускать так:
def set_trace(): import pdb;import sys pdb.set_trace(sys._getframe().f_back)
if True: # str_i set_trace() # str_j
Отладка функции
Для этого можно воспользоваться следующей функцией:
def debug(f, *args, **kwargs): import pdb return pdb.runcall(f, *args, **kwargs)
и вызов производить как в примере ниже:
def test_func(a,e=1): b = 3 d = b-e c = a+b debug(test_func, a=5)
При работе с отладчиком вам могут пригодится часто используемые команды:
b - поставить точку останова
c - продолжить выполнение кода
n - выполнить строку и перейти к другой
s - переместиться внутрь функции
q - выйти из отладчика
u - перемещение вверх по стеку вызовов
d - перемещение вниз по стеку вызовов
a - вывести аргументы функции
l - показать текущую и окружающие строки
w - распечатать стек вызовов
r - выход из функции
interact - вход в интерактивный режим