首页 > 解决方案 > 如何识别跟踪中的每条指令访问(读取和/或写入)哪些变量?

问题描述

我正在尝试从 Python 代码的跟踪中构建依赖关系图。(我知道我不会有完整的信息)以代码片段为例:

L1: a = 1
L2: b = 2
L3: c = a + b 
L4: d = a + 2 + c

依赖图每条线有一个节点,并包含以下边(很抱歉没有提供图的图像)。每条边都意味着数据依赖。例如,在 L3c中使用 计算a,因此边缘 L1 -> L3

L1 -> L3
L2 -> L3
L1 -> L4
L3 -> L4

我打算使用sys.settrace(trace). 正在为每条指令调用函数跟踪。我需要确定的是在每条指令中读取和/或写入了哪些变量。使用该(部分)信息,我可以构建依赖关系图(仅针对该特定跟踪更正)。

在跟踪函数中,我可以访问堆栈帧和局部变量。通过跟踪每个变量的值,我可以检查对变量的写入。然而,这是非常昂贵的。但是我在堆栈框架中找不到任何可以帮助我识别读取的内容。

总结一下,我的疑问是:

  1. 如何识别对变量的读取和/或写入?

  2. 我选择使用sys.settrace()正确,还是应该检查一些不同的工具?

编辑:我知道使用跟踪只会给我一个不完整的场景。但是,来自跟踪的依赖关系图将适用于我的情况。

标签: pythonstack-tracetrace

解决方案


推荐阅读