Python 3.7: новые возможности отладки — краткий обзор
Nuances of programmingПеревод статьи Anthony Shaw: Python 3.7’s new builtin breakpoint — a quick tour

Отладка в Python всегда была немного «неудобной» по сравнению с другими языками, с которыми я работал.
Большинство разработчиков обычно поступают так: импортируют модуль pdb из стандартной библиотеки и запускают pdb.set_trace(), который вводит интерактивную отладочную сессию в консоли.
При таком подходе возникают некоторые проблемы:
- Написание
import pdb; pdb.set_trace()несколько сложно для понимания. После того, как вы наберете его раз сто, это переходит уже просто в мышечную память, но для новых разработчиков этот подход совсем не очевиден. - PDB - не единственный отладчик, но он самый простой. Есть много вариантов и получше.
- Как быть, если вы пишете не просто консольное приложение? Например, что делать, если точка останова находится на сервере или у вас потоковая задача, где в этом случае задается сеанс отладки?
В Python 3.7 реализован PEP553, новый способ установки точек останова в коде.
Новый метод работы с точками останова
Итак, во-первых точка останова – это функция, а НЕ ключевое слово.
Поэтому просто установка breakpoint на строку кода, на которой вы хотите остановить выполнение программы, ни к чему не приведет. Вы должны вызвать ее как метод, то есть так: breakpoint()
Реализация точки останова по умолчанию требует импортировать библиотеку import pdb, а вызов этой функции задается командой pdb.set_trace().
name = "value" breakpoint()
Допускается сеанс pdb в командной строке.

Таким образом, это уже намного интуитивно более понятно, чем в текущих версиях Python.
Постойте, вот еще
Новый метод точки останова можно отключить с помощью переменной среды PYTHONBREAKPOINT. Поэтому, если вы оставить точки останова в своем коде, выполнив отладку с ними только один раз, вполне можно потом полноценно выполнять программу, точки останова не будут мешать. Вы можете просто установить значение среды в нуль.
PYTHONBREAKPOINT=0 python3.7 debugger.py
Повторный вызов того же скрипта просто завершит выполнение, пропустив точки останова при выполнении.

Постойте, а вот и еще!
Переменной окружения PYTHONBREAKPOINT можно назначить имя вызова. Она может быть вызываемой, то есть с помощью ее вызова запускается сеанс отладки с помощью другой сторонней библиотеки отладчика.
pudb - одна из таких библиотек. Pudb - это интерактивный консольный отладчик с аналогичными ключевыми сочетаниями клавиш как в pdb, но с ним гораздо проще работать. pudbсуществует уже давно и полностью поддерживается в версиях Python 2 и Python 3.

Чтобы использовать pudb в качестве отладчика, сначала убедитесь, что вы его установили, установка осуществляется с помощью консольной команды pip install pudb, затем установите переменную окружения в pudb.set_trace.
Вызов в командной строке следующий :
PYTHONBREAKPOINT=pudb.set_trace python3.7 debugger.py
Он является эквивалентной заменой метода breakpoint() с помощью import pudb; pudb.set_trace()
Довольно круто.
А что насчет удаленной отладки и потоков?
Эта новая функция точки останова открывает интересный вариант использования.
Когда вы разрабатываете распределенное приложение для нескольких серверов или потоков, вы можете использовать локальный отладчик, например pudb.
При развертывании приложения в тестовой среде вы, скорее всего, не сможете его выполнить из cli. Тогда вы вызываете его из gevent или WSGI и т.п. Это возможно, когда вы изменяете переменную среды на своем веб-сервере или в тестовой среде или на другом отладчике, который допускает удаленные соединения.
Одним из таких пакетов, который вы можете использовать, является web-pdb. Web-pdb – это удаленный отладчик, который запускает веб-сервер при достижении точки останова и вы можете удаленно подключаться через браузер и интерактивно отлаживать сеанс.
Если вы установите web-pdb с помощью команды pip install web-pdb, вы можете сделать экспорт точек останова с помощью команды export PYTHONBREAKPOINT=’web_pdb.set_trace’, в этом случае, когда вызывается функция breakpoint() (независимо от того, находится ли она в фоновом режиме), вы можете подключиться к службе локально по умолчанию через порт 5555, и использовать этот интерфейс.

Статью перевел Владислав Семёнов.