2013-01-12 94 views
2

在python代码运行期间,有什么方法可以跟踪对象的生命周期吗?我知道关于设置回调函数的sys.settrace函数,我可以停止每个函数调用或代码行,但在此期间如何访问“活动”对象?我想跟踪程序,这样我可以在每次停止后进行随机检查,就好像我真的在停止位置添加了代码。Python对象生命周期跟踪

+0

不知道你是什么试图在这里实现。你想收集什么样的信息? –

+0

例如,在这一步执行传递给func'func1'的程序和1行已经在哪个对象创建了某种类型的obj1。我想检查这个obj1,例如从'dir(obj1)'得到结果或者检查'obj1'类。 – exbluesbreaker

+1

你不能用'import pdb; pdb.set_trace()'?这给你一个交互式调试器。对象创建本身是不可追踪的,把痕迹放在它们的'__init__'或'__new__'函数中。 –

回答

2

可以通过CPython中的gc(垃圾回收器)模块完成一些扩展。

Garbage Collector 有使用对象作为参数一些功能,并可以提供一些信息,有关对象存在:

gc.get_referrers(*objs) 
gc.get_referents(*objs) 
gc.is_tracked(obj) 

只是简单的检查对象存在使用“试”作为described here

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 –

+0

该链接被提供给python文档。事实上,对我来说,评论OP问题会更好,但我还没有权利这样做。我会从链接粘贴一些信息。 –