breakpoint()
Функция останова breakpoint() вызывает функцию sys.breakpointhook(). По умолчанию sys.breakpointhook() в свою очередь вызывает функцию pdb.set_trace().
Использование встроенной функции breakpoint(), по крайней мере, обеспечивает удобство использования отладчика, поскольку не нужно явно импортировать модуль pdb, а так же писать дополнительный код, чтобы войти в отладчик. Функция breakpoint() представляет синтаксический сахар над имеющимися конструкциями.
Изменено в Python 3.14 Точки останова (
breakpoint(),pdb.set_trace()) теперь повторно используют последний экземплярPdb. Это позволяет сохранять настройки между остановками:display,commandsи т.д.
Простой пример использования функции breakpoint(). Есть скрипт на Python breakpoint_test.py со следующим кодом.
x = 10 y = 'Hi' z = 'Hello' print(y) breakpoint() print(z)
Когда мы запустим этот скрипт, встретив точку останова в коде интерпретатор затормозит процесс исполнения, открыв консоль отладчика PDB, что позволит нам детально разобраться в происходящем. Чтобы прервать PDB-сессию и продолжить выполнение скрипта, нажмите C и Enter.
Hi > /home/script/breakpoint_test.py(7)<module>() -> print(z) (Pdb) c Hello
Для управления отладкой используется переменная окружения PYTHONBREAKPOINT. Если присвоить ей значение 0, то все точки останова в коде будут проигнорированы интерпретатором.
$ PYTHONBREAKPOINT=0 python3.7 breakpoint_test.py
С помощью PYTHONBREAKPOINT можно заменить встроенный модуль PDB на сторонний отладчик, например, PuDB. Импорт модуля Python берет на себя. Не забудьте установить pudb (pip install pudb).
$ PYTHONBREAKPOINT=pudb.set_trace python3.7 breakpoint_test.py
По умолчанию функцией breakpoint() использует встроенный в интерпретатор отладчик PDB, который не принимает параметров, однако можно заменить функцию отладки на print() и передать туда какие-то переменные.
# breakpoint_test.py x = 10 y = 'Hi' z = 'Hello' breakpoint(x, y, z, end="<==\n")
Запустим breakpoint_test.py, установив print() в качестве отладчика, которую будет вызывать команда breakpoint().
$ PYTHONBREAKPOINT=print python3.7 breakpoint_test.py 10 Hi Hello <==
Так же можем написать свою функцию, которую будет вызывать команда breakpoint(). Например, функцию просмотра локальных переменных в коде.
# breakpoint_test.py from pprint import pprint import sys def print_locals(): caller = sys._getframe(1) pprint(caller.f_locals) x = 10 y = 'Hi' z = 'Hello' breakpoint()
Теперь заменим значение PYTHONBREAKPOINT, используя нотацию <модуль>.<функция>:
$ PYTHONBREAKPOINT=breakpoint_test.print_locals python3.7 breakpoint_test.py ... ... 'pprint': <function pprint at 0x7f08536d7170>, 'print_locals': <function print_locals at 0x7f085218d200>, 'sys': <module 'sys' (built-in)>, 'x': 10, 'y': 'Hi', 'z': 'Hello'}