Watchpoints: инструмент для мониторинга переменных в Python
Разработчик Тиан Гао создал инструмент с открытым исходным кодом для мониторинга переменных при отладке Python под названием Watchpoints.
Инструмент ведет себя точно так же, как программа gdb (для отладки кода на C и C++).
- Чтобы установить watchpoints, нужно выполнить следующую команду:
 
$ python3 -m pip install watchpoints
 Для отслеживаемой любой переменной используется функция watch.
from watchpoints import watch a = 0 watch(a) a = 1
При изменении переменной информация о ее значении выводится через стандартный поток вывода данных.
====== Watchpoints Triggered ====== Call Stack (most recent call last): <module> (my_script.py:5): > a = 1 a: 0 -> 1
В данных о переменной будет храниться информация о строке, в которой была изменена переменная, стеке вызовов, предыдущем и текущем значении переменной.
- Инструмент работает не только с самой переменной, но также с изменениями объекта.
 
from watchpoints import watch
a = []
watch(a)
a = {} # Trigger
a["a"] = 2 # Trigger
- Функция 
callbackзапускается при переназначении переменной «a» и при изменении объекта, назначенного переменной. 
Инструмент также позволяет наблюдать за переменной/объектом в любом месте, и функция callback запускается независимо от того, как функцию выполняет программа.
from watchpoints import watch
def func(var):
    var["a"] = 1
a = {}
watch(a)
func(a)
- Функция 
watchможет отслеживать не только переменную, но и атрибуты, и элемент словаря и списка. Это может помочь сузить круг поиска конкретных объектов. 
from watchpoints import watch
class MyObj:
    def __init__(self):
        self.a = 0
obj = MyObj()
d = {"a": 0}
watch(obj.a, d["a"]) # Yes you can do this
obj.a = 1 # Trigger
d["a"] = 1 # Trigger
- Инструмент позволяет настраивать формат вывода. Чтобы это сделать нужно обозначить собственную функцию 
callback. 
watch(a, callback=my_callback) # Or set it globally watch.config(callback=my_callback)
- Можно вызвать интерактивный отладчик pdb даже при срабатывании триггера
 
watch.config(pdb=True)
Чтоб не импортировать функцию в каждый отдельный файл, можно сделать ее глобальной, используя функцию install:
watch.install() # or watch.install("func_name") and use it as func_name()
Open source-инструмент watchpoints распространяется под лицензией Apache 2.0 и доступен на GitHub.
        
        
    
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: