Python是如此动态,以至于并不总是清楚大型程序中发生了什么,并且查看一小部分源代码并不总是有帮助。更糟糕的是,编辑人员往往很难支持导航到令牌的定义或导入Python文件中的语句。
补偿的一种方法可能是编写一个特殊的分析器,它不会对程序进行计时,而是记录程序对象的运行时类型和路径,并将这些数据公开给编辑器。
这可以用sys.settrace()来实现,它为每行代码设置回调,是pdb的实现方式,还是使用ast模块和导入钩子来检测代码,还是有更好的策略?你怎么会写这样的东西而不会让它变得非常缓慢,并且没有因为极端动力而产生影响,例如对财产获取产生影响?
答案 0 :(得分:3)
我认为你不能帮助它变慢,但是当你遇到STORE_FAST STORE_NAME STORE_ *操作码时,应该可以检测每个变量的地址。
以前是否已经完成,我不知道。
如果您需要调试,请查看PDB,这样您就可以单步执行代码并访问任何变量。
import pdb
def test():
print 1
pdb.set_trace() # you will enter an interpreter here
print 2
答案 1 :(得分:1)
如果你修补了object
的类或其他原型对象,该怎么办?
如果您不使用新式课程,这可能不是最简单的。
答案 2 :(得分:1)
你可能想查看PyChecker的代码 - 它(我认为)确实是你要做的。
答案 3 :(得分:1)
Pythoscope与您描述的内容非常相似,它通过sys.settrace
使用AST形式的静态信息和动态信息的组合。