Как я могу определить, какие переменные были доступны (чтение и / или запись) по инструкции из трассировки? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь построить графы зависимостей из трассировки кода 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 вызывается для каждой инструкции. Мне нужно определить, какие переменные читаются и / или записываются в каждой инструкции. С этой (частичной) информацией я могу построить граф зависимостей (исправить только для этой конкретной трассы).

Внутри функции трассировки я могу получить доступ к кадру стека и локальным переменным. Отслеживая значение каждой переменной, я могу проверить записи в переменную. Однако это очень дорого. Но я не нахожу внутри фрейма стека ничего, что могло бы помочь мне определить чтения.

Подводя итог, мои запросы:

  1. Как идентифицировать операции чтения и / или записи в переменные?

  2. Правильно ли я выбрал sys.settrace() или я должен проверить какой-нибудь другой инструмент?

Edit: Я понимаю, что использование трассировки только дает мне неполный сценарий. Тем не менее, граф зависимостей от трассировки подойдет для моего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...