Что такое лучший способ для интерактивной отладки в Python?

Я хочу использовать поддержку самоанализа Python для отладки/разработки, но не могу найти соответствующий инструмент для этого.

Я должен ввести в оболочку (IPython, например) в определенном положении или на определенном событии (как исключение) с местными жителями и globals оболочки, устанавливаемой на кадра.

Мой собственный быстрый взлом для иллюстрирования его:

import inspect
from IPython.Shell import IPShellEmbed
def run_debug():
    stack = inspect.stack()
    frame = stack[1][0]
    loc = frame.f_locals
    glob = frame.f_globals
    shell = IPShellEmbed()
    shell(local_ns=loc, global_ns=glob)

С согласно run_debug () звонят от 'точки останова' или попытки/кроме. Но, очевидно, этому нужна большая полировка, особенно для работы с потоковыми приложениями правильно.

winpdb имеет точки останова с консолью, но я не нашел способа быстро выполнить надлежащую оболочку Python от него, и оценка () / должностное лицо () не очень удобна для долгой отладки.

8
задан Martijn Pieters 30 March 2015 в 10:45
поделиться

5 ответов

В личных / образовательных целях вы можете использовать WingIDE - они обладают довольно хорошими возможностями отладки.

Конечно, если вы просто беспокоитесь об изменении значений, вы всегда можете просто использовать raw_input () - но это может быть недостаточно продвинутым для ваших нужд.

2
ответ дан 5 December 2019 в 22:15
поделиться

Подобно тому, что вы уже делаете, есть ipdb . Фактически, это pdb с оболочкой ipython (т.е. завершение табуляции, все различные магические функции и т. Д.).

На самом деле он делает именно то, что делает небольшой фрагмент кода, который вы разместили в своем вопросе, но превращает его в простой вызов «ipdb.set_trace ()».

3
ответ дан 5 December 2019 в 22:15
поделиться

PyScripter (FOSS) имеет довольно хороший встроенный отладчик.

0
ответ дан 5 December 2019 в 22:15
поделиться

Я думаю, что вопрос Python Drop into REPL похож на то, что вы хотите сделать, посмотрите (особенно ответ , предлагающий «код» модуля ) ...

1
ответ дан 5 December 2019 в 22:15
поделиться

Если вы запустите свой код из ipython и обнаружите исключение, вы можете впоследствии вызвать% debug, чтобы перейти в pdb в случае исключения. Это должно дать вам то, что вы хотите. Или, если вы запустите ipython -pdb, вы автоматически попадете в pdb при возникновении неперехваченного исключения.

0
ответ дан 5 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: