Python objects life cycle tracing
在Python代码运行期间,是否有任何方法可以跟踪对象的生命周期?我知道sys.settrace函数用于设置回调,我可以在每个函数调用或代码行上停止,但在此期间如何访问"活动"对象?我想跟踪程序,这样我就可以在每次停止后进行随机检查,就好像我真的在源代码的停止位置添加了代码。
- 不确定你在这里想要达到什么目的。你想收集什么样的信息?
- 例如,在这个步骤中,执行传递给func func1和运行1行allready的程序,其中创建了某种类型的对象obj1。我想检查这个obj1,例如从dir(obj1)或检查obj1的类得到结果。
- 你不能用import pdb; pdb.set_trace()来做吗?这就为您提供了一个交互式调试器。对象创建本身是不可跟踪的,在它们的__init__或__new__函数本身中放置跟踪。
- 谢谢您!也许这就是我需要的。我会试试看。
- 我想在不修改源代码的情况下跟踪程序。我意识到我必须将pdb.set_trace()添加到程序中的所有函数中,我正在跟踪这些函数。另外,我对交互式跟踪不感兴趣,我想编写代码,在执行期间提取所需的数据。
CPython中的gc(垃圾收集器)模块可以进行一些扩展。
垃圾收集器很少有函数使用对象作为参数,可以提供有关对象存在的一些信息:
1 2 3
| gc.get_referrers(*objs)
gc.get_referents(*objs)
gc.is_tracked(obj) |
要简单地检查对象是否存在,请使用此处描述的"try"
- 虽然这个链接可以回答问题,但最好在这里包含答案的基本部分并提供链接以供参考。如果链接页发生更改,则仅链接答案可能无效。
- 链接提供给了python文档。事实上,对我来说,对OP问题发表评论会更好,但我还没有这样做的权利。我将粘贴来自链接的一些信息。