17.6.5 调试
调试内存泄漏可能很有难度。gc包括有一些选项,可以提供代码的内部工作情况,使这个任务更为简单。这些选项都是位标志,可以组合传递到set_debug(),在程序运行时配置垃圾回收器。调试信息被打印到sys.stderr。
DEBUG_STATS标志打开统计报告。这会使垃圾回收器报告它何时运行、每一代跟踪的对象数以及完成清扫花费的时间。
import gc
gc.set_debug(gc.DEBUG_STATS)
gc.collect()
print('Exiting')
这个示例输出显示运行了两次回收器。第一次是在显式调用时运行,第二次是在解释器退出时运行。
启用DEBUG_COLLECTABLE和DEBUG_UNCOLLECTABLE会让回收器报告它检查的各个对象能不能回收。如果看到不能回收的对象,但这还不能提供足够的信息来了解数据保留在哪里,则可以启用DEBUG_SAVEALL,这会让gc保留它找到的所有对象,但在garbage列表中没有任何引用。
import gc
flags = (gc.DEBUG_COLLECTABLE |
gc.DEBUG_UNCOLLECTABLE |
gc.DEBUG_SAVEALL
)
gc.set_debug(flags)
class Graph:
def __init__(self,name):
self.name = name
self.next = None
def set_next(self,next):
self.next = next
def __repr__(self):