breakpoint()
Функция останова breakpoint()
вызывает функцию sys.breakpointhook()
. По умолчанию sys.breakpointhook()
в свою очередь вызывает функцию pdb.set_trace()
.
Использование встроенной функции breakpoint()
, по крайней мере, обеспечивает удобство использования отладчика, поскольку не нужно явно импортировать модуль pdb
, а так же писать дополнительный код, чтобы войти в отладчик. Функция breakpoint()
представляет синтаксический сахар над имеющимися конструкциями.
Простой пример использования функции 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'}