手头的问题是找到内存泄漏。我已经使用Devel :: Refcount来显示应用程序中的哪些对象在内存中不应该保留时。枚举perl解释器中的所有引用
已经提出了三种方法来找到这些结构的难以捉摸的链接。
1 - 也许存在一个数据结构,可以让我得到指向我的对象的符号列表,这将是理想和直接的。
2 - 遍历所有已定义的名称空间中的符号表,查找引用并使用迭代堆栈来确定它的位置。
3 - 插入一个钩子,可以让我记录堆栈位置,当某个引用的链接计数已经改变或改变时,以及持有该链接的符号的地址。我可以使用它来找到哪些符号直接保存我的参考。
这是可能的吗?这种反思是棘手的东西,我可能很了解perl,但我不知道如何去做。我对padwalker的研究看起来好像可能有关键,但并没有出生。你的想法?
请注意,您可以使用内建'内部:: SvREFCNT(%$ self)访问refcount' – ikegami
我有refcount。我希望持有refcount非零的结构的名称空间定义,以及谁将THAT结构的refcount保持为非零等等,直到我找到具有不应该在范围内定义的值的变量。 – Skylos
我相信你有最后的答复。既然您知道哪个对象在泄漏,您可以使用此功能和标准调试来查找泄漏。 – ikegami