Каковы ваши лучшие советы по отладке Python?
Пожалуйста, не перечисляйте конкретный отладчик, не сказав, что он на самом деле может делать.
Связанный
- Каковы хорошие способы заставить мой код Python запускаться впервые? - Это обсуждает минимизацию ошибок
Ответы:
PDB
Вы можете использовать модуль pdb, вставлять
pdb.set_trace()
куда угодно, и он будет функционировать как точка останова.Для продолжения исполнения используйте
c
(илиcont
илиcontinue
).Можно выполнить произвольные выражения Python, используя pdb. Например, если вы нашли ошибку, вы можете исправить код, а затем ввести выражение типа, чтобы иметь тот же эффект в работающем коде
ipdb - это версия pdb для IPython . Это позволяет использовать pdb со всеми функциями IPython, включая завершение табуляции.
Также можно настроить автоматический запуск pdb для необработанного исключения.
Pydb был написан как расширенная версия Pdb. Преимущества?
источник
myserver.com/pdb
в режиме отладкиimport pdb; pdb.set_trace()
. Если вы используете Flask / Werkzeug с интерактивным отладчиком, вы также можете иметь представление, которое только что появилосьassert False
.http://pypi.python.org/pypi/pudb , полноэкранный консольный отладчик Python.
Хорошо для отладки автономных скриптов, просто запустите
источник
pip install pudb
Если вы используете pdb, вы можете определить псевдонимы для ярлыков. Я использую это:
источник
логирование
Python уже имеет отличный встроенный модуль регистрации . Вы можете использовать шаблон регистрации здесь .
Модуль регистрации позволяет вам указать уровень важности; во время отладки вы можете регистрировать все, в то время как при нормальной работе вы можете регистрировать только критические вещи. Вы можете выключать и включать вещи.
Большинство людей просто используют базовые операторы печати для отладки, а затем удаляют операторы печати. Лучше оставить их, но отключить их; затем, когда у вас есть другая ошибка, вы можете просто снова включить все и просмотреть ваши журналы.
Это может быть наилучшим способом отладки программ, которые должны быстро выполнять какие-либо действия, например сетевых программ, которые должны реагировать до истечения времени ожидания и прекращения работы другого конца сетевого подключения. У вас может не быть много времени для пошагового отладчика; но вы можете просто позволить своему коду работать и регистрировать все, затем изучать журналы и выяснять, что на самом деле происходит.
РЕДАКТИРОВАТЬ: оригинальный URL для шаблонов был: http://aymanh.com/python-debugging-techniques
Эта страница отсутствует, поэтому я заменил ее ссылкой на снимок, сохраненный на archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
В случае, если он снова исчезнет, вот шаблоны, которые я упомянул. Это код взят из блога; Я не писал это.
И вот его объяснение того, как использовать выше. Опять же, я не получаю кредит на это:
По умолчанию модуль журналирования печатает критические сообщения, сообщения об ошибках и предупреждения. Чтобы изменить это так, чтобы печатались все уровни, используйте:
Чтобы отправить сообщения журнала в файл с именем debug.log, используйте:
источник
Можно напечатать, какие строки Python выполняются (спасибо, Гео!). У него есть любое количество приложений, например, вы можете изменить его, чтобы проверить, когда вызываются определенные функции, или добавить что-то вроде ##, чтобы оно отслеживало только определенные строки.
code.interact перенесет вас в интерактивную консоль
Если вы хотите иметь легкий доступ к своей истории консоли, посмотрите: « Могу ли я иметь механизм истории, как в оболочке? » (Придется поискать его вниз).
Автозаполнение может быть включено для переводчика .
источник
ipdb похож на pdb, с удивительным ipython.
источник
print
заявленияdebug_print
функцию вместо печати для легкого отключенияpprint
Модуль имеет неоценимое значение для сложных структуристочник
очевидный способ отладки скрипта
если вы не знаете точно, где находится этот скрипт
источник
PyDev
PyDev имеет довольно хороший интерактивный отладчик. Он имеет выражения для просмотра, подсказки для наведения, списки потоков и стеков и (почти) все обычные удобства, которые вы ожидаете от современного визуального отладчика. Вы даже можете подключиться к запущенному процессу и выполнить удаленную отладку.
Как и другие визуальные отладчики, я нахожу это полезным в основном для простых задач или для очень сложных задач после того, как я попробовал все остальное. Я все еще делаю большую часть тяжелой работы с лесозаготовками.
источник
Если вы знакомы с Visual Studio, Python Tools для Visual Studio - это то, что вы ищете.
источник
Winpdb очень хорош, и, в отличие от его названия, он полностью кроссплатформенный.
Он имеет очень хороший отладчик на основе подсказок и графического интерфейса и поддерживает удаленную отладку.
источник
В Vim у меня есть три привязки:
rpdb2
удаленный отладчик Python, который можно использовать с WinPDB, надежным графическим отладчиком Поскольку я знаю, что вы спросите, он может делать все, что я ожидаю от графического отладчика :)Я использую
pdb
изnose.tools
так что я могу отлаживать юнит - тесты, а также нормальный код.Наконец,
F7
отображение напечатает трассировку (аналогично тому, который вы получаете, когда исключение всплывает на вершину стека). Я нашел это действительно полезным больше, чем несколько раз.источник
Определение полезных методов repr () для ваших классов (чтобы вы могли видеть, что это за объект) и использование repr () или "% r"% (...) или "... {0! R} ..". Формат (...) в ваших отладочных сообщениях / журналах ИМХО является ключом к эффективной отладке.
Кроме того, отладчики, упомянутые в других ответах, будут использовать методы repr ().
источник
Получение трассировки стека из запущенного приложения Python
Есть несколько хитростей здесь . Это включает
источник
Если вам не нравится проводить время в отладчиках (и вы не цените простоту использования
pdb
интерфейса командной строки), вы можете сбросить трассировку выполнения и проанализировать ее позже. Например:Это сбросит всю исходную строку
setup.py install
выполнения вexecution.log
.Чтобы упростить настройку вывода трассировки и написать собственные трассировщики, я собрал несколько фрагментов кода в модуль xtrace (общедоступный домен).
источник
Когда это возможно, я отлаживаю
M-x pdb
в emacs для отладки на уровне исходного кода.источник
Андреас Зеллер (Andreas Zeller ) предлагает полный онлайн-курс под названием « Отладка программного обеспечения », содержащий советы по устранению неполадок:
Настоятельно рекомендуется.
источник
если вам нужен удобный графический способ печати стека вызовов в удобочитаемой форме, воспользуйтесь этой утилитой: https://github.com/joerick/pyinstrument
Запустить из командной строки:
Запустить как модуль:
Запустите с Джанго:
Просто добавьте
pyinstrument.middleware.ProfilerMiddleware
кMIDDLEWARE_CLASSES
, затем добавьте?profile
в конце запроса URL для активации профилировщика.источник