ipdb (отладчик IPython)
ipdb добавляет функциональность IPython в pdb, предлагая следующие ОГРОМНЫЕ улучшения:
- табуляция
- показать больше строк контекста
- подсветка синтаксиса
Так же, как и pdg, ipdb по-прежнему далек от совершенства и полностью элементарен по сравнению с GDB, но это уже огромное улучшение по сравнению с pdb.
Использование аналогично pdb
, просто установите его с помощью:
python3 -m pip install --user ipdb
и затем добавьте в строку, из которой вы хотите выполнить отладку:
__import__('ipdb').set_trace(context=21)
Вы, вероятно, хотите добавить ярлык для этого из вашего редактора, например, для Vim snipmate У меня есть:
snippet ipd
__import__('ipdb').set_trace(context=21)
, поэтому я могу набрать только ipd<tab>
, и оно расширяется до точки останова. Тогда удалить его просто с помощью dd
, поскольку все содержится в одной строке.
context=21
увеличивает количество строк контекста, как описано в: Как я могу заставить ipdb показывать больше строк контекста при отладке?
Кроме того, вы также можете отлаживать программы с самого начала с помощью:
ipdb3 main.py
но вы, как правило, не хотите этого делать, потому что:
- вам придется пройти через все определения функций и классов, когда Python читает эти строки
- Я не знаю, как установить размер контекста без взлома ipdb. Патч для разрешения: https://github.com/gotcha/ipdb/pull/155
Или же, как в raw pdb 3.2+, вы можете установить некоторые точки останова из командной строки:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
хотя -c c
почему-то не работает: https://github.com/gotcha/ipdb/issues/156
python -m module
Отладка была задана по адресу: Как отладить модуль Python, запущенный с python -m из командной строки? , и, поскольку Python 3.7 можно выполнить с помощью:
python -m pdb -m my_module
Серьезные недостающие возможности как pdb, так и ipdb по сравнению с GDB:
ipdb специфические неприятности:
- многопоточность не работает, если вы не взломали некоторые настройки ...
Протестировано в Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.