ガーベージコレクションの過程をデバッグ
gc.set_debugをコールして、リークの起きるオブジェクトをリサイクルさず、gc.garbageリストに保持させる。
gc.collectでガーベージコレクションを強制実行。
それでも残っている物は開放不可オブジェクトとなる。
>>> def dump_garbage(): """ どんなゴミがあるか見せる """ # 強制収集 print('GARBAGE:') gc.collect() # 検出した到達不可オブジェクトの数を返します。 print('GARBAGE OBJECTS:') # 到達不能であることが検出されたが、解放する事ができないオブジェクトのリスト # (回収不能オブジェクト) for x in gc.garbage: s = str(x) if len(s) > 80: s = s[:77]+'...' print(type(x),'\n ',s) >>> if __name__=='__main__': gc.enable() # 自動ガベージコレクションを有効にします。 gc.set_debug(gc.DEBUG_LEAK) # メモリリークをデバッグするときに指定 # 循環参照を作成 l = [] l.append(l) # 循環参照オブジェクトを削除 del l dump_garbage() GARBAGE: gc: collectable <list 00F71620> GARBAGE OBJECTS: <class 'list'> [[...]]