跟踪Python函数的全局访问

时间:2014-10-13 17:53:44

标签: python python-2.7 cpython

我希望能够跟踪Python函数访问哪些全局变量。我第一次尝试这样做涉及创建dict的子类,该子类将其调用记录到__getitem____setitem__,并使用globals构建一个新函数。

这种类型有点适用于Python 3(虽然我还没有让内置工作正常工作)。但是,looks like这在Python 2中根本不起作用,因为CPython直接在全局变量上调用PyDict_SetItem()而不是PyObject_SetItem()

在Python 2中做同样事情的最佳方法是什么?我是否只需检查LOAD_GLOBAL指令的字节码,还是有更好的方法?

编辑:LOAD_GLOBAL方法的一个缺点是我无法检测函数是否实际访问全局变量 - 例如,如果只访问全局foo一个分支,上面详述的方法可以判断该分支是否已执行,而字节码读取则不会。另一个缺点是,它无法通过globals()[bar]捕获变量访问。这些对我来说相当小,但解决它们会很好。

0 个答案:

没有答案