Я пытаюсь построить графы зависимостей из трассировки кода Python. (Я понимаю, что у меня не будет полной информации). Рассмотрим фрагмент кода, например:
L1: a = 1
L2: b = 2
L3: c = a + b
L4: d = a + 2 + c
Граф зависимостей будет иметь один узел на строку и содержать следующие ребра (извините за то, что не предоставил изображение графика). Каждое ребро подразумевает зависимость данных. Например, в L3 c
вычисляется с использованием a
, следовательно, ребро L1 -> L3
L1 -> L3
L2 -> L3
L1 -> L4
L3 -> L4
Я планирую использовать sys.settrace(trace)
. Функция trace вызывается для каждой инструкции. Мне нужно определить, какие переменные читаются и / или записываются в каждой инструкции. С этой (частичной) информацией я могу построить граф зависимостей (исправить только для этой конкретной трассы).
Внутри функции трассировки я могу получить доступ к кадру стека и локальным переменным. Отслеживая значение каждой переменной, я могу проверить записи в переменную. Однако это очень дорого. Но я не нахожу внутри фрейма стека ничего, что могло бы помочь мне определить чтения.
Подводя итог, мои запросы:
Как идентифицировать операции чтения и / или записи в переменные?
Правильно ли я выбрал sys.settrace()
или я должен проверить какой-нибудь другой инструмент?
Edit:
Я понимаю, что использование трассировки только дает мне неполный сценарий. Тем не менее, граф зависимостей от трассировки подойдет для моего случая.