2013-01-12 92 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問題會更好,但我還沒有權利這樣做。我會從鏈接粘貼一些信息。 –