Из того, что я прочитал, есть два способа отладки кода в Python:
-
С традиционным отладчиком, например
pdb
илиipdb
. Это поддерживает команды, такие какc
дляcontinue
,n
дляstep-over
,s
дляstep-into
и т.д.), Но у вас нет прямого доступа к оболочке IPython, которая может быть чрезвычайно полезна для осмотр объекта. -
Используя IPython embedding оболочку IPython в вашем коде. Вы можете сделать
from ipython import embed
, а затем использоватьembed()
в своем коде. Когда ваша программа /script попадает в операторembed()
, вы попадаете в оболочку IPython. Это позволяет полностью проверять объекты и тестировать код Python, используя все плюсы IPython. Однако при использованииembed()
вы не можете шаг за шагом через код с помощью удобных сочетаний клавиш.
Есть ли способ объединить лучшее из обоих миров? То есть.
- Уметь шаг за шагом через ваш код с удобными сочетаниями клавиш pdb/ipdb.
- На любом таком этапе (например, в заданном операторе) есть доступ к полнофункциональной оболочке IPython.
Отладка IPython, как в MATLAB:
Пример такого типа "расширенной отладки" можно найти в MATLAB, где пользователь всегда имеет полный доступ к движку/оболочке MATLAB, и она может по-прежнему шаг за шагом -step через свой код, определить условные точки останова и т.д. Из того, что я обсуждал с другими пользователями, это функция отладки, которую люди больше всего пропускают при переходе с MATLAB на IPython.
Отладка IPython в Emacs и других редакторах:
Я не хочу, чтобы вопрос был слишком специфичным, но я работаю в основном в Emacs, поэтому я задаюсь вопросом, есть ли способ внедрить в него эту функциональность. В идеале, Emacs (или редактор) позволит программисту устанавливать точки останова в любом месте кода и общаться с интерпретатором или отладчиком, чтобы он остановился в выбранном вами месте и довел до полного IPython интерпретатор в этом месте.