Остановка отладки ipdb в Jupyter

Я использую Юпитер и пытаюсь научиться отлаживать. Однако я не могу завершить выход из режима отладки.

for i in np.arange(1,10, 0.01):
    a = someFunc(i)
    # I want to check the value of "a" in each iteration
    # here!
    from IPython.core.debugger import Tracer; Tracer()() #this one triggers the debugger

Если я запускаю этот код и набираю "q" или "exit" в приглашении отладки ipdb, он просто продолжает выполнение кода до следующей точки останова, и я не могу остановить отладку. Как я могу остановить отладку? Я просмотрел документацию, но не смог найти никакой другой команды, кроме "q".

1 ответ

Решение

Вы должны начать трассировку, прежде чем войти в цикл. В настоящее время происходит то, что вы создаете новый экземпляр отладчика с каждым шагом цикла.

Ваш код будет выглядеть так:

from IPython.core.debugger import Tracer

for i in np.arange(1,10, 0.01):
    a = someFunc(i)
    Tracer()()

Вы получите приглашение командной строки, где можно использовать все стандартные функции ipdb. Позвонив в Tracer сразу после выполнения someFunc(i) Вы получите новое приглашение с каждой итерацией. Для продолжения выполнения до следующей итерации используйте c команда. Для установки точек останова используйте b <line number>, q остановит казнь все вместе.

Другие вопросы по тегам