【发布时间】:2015-11-08 13:45:17
【问题描述】:
所以,这有点简单——但如果我像这样设置循环引用:
#!/usr/bin/perl
use strict;
use warnings;
{
my $thing;
my $otherthing;
$thing -> {otherthing} = \$otherthing;
$otherthing -> {thing} = \$thing;
}
我创建了内存泄漏 - 因为通过引用计数,这里分配的内存将永远不会被释放,尽管没有任何外部“访问点”。
所以我想知道 - 在这种情况下,我有什么方法可以 - 通过调试或类似方式 - “重新发现”这些变量并再次访问它们?
假设我正在考虑一个不那么琐碎的情况 - 你有一个内存泄漏的对象,但想再次“捕捉”它以查看其中的内容,以提示所述对象中的内容,因此问题开始的地方。
【问题讨论】:
-
我知道search.cpan.org/~lds/Devel-Cycle-1.10/lib/Devel/Cycle.pm 和search.cpan.org/~ilyaz/Devel-Peek-0.96/Peek.pm 都有助于解决这些问题,但是当变量超出范围并“丢失”时我从未使用过它们,所以我不知道如果它们在这些情况下有用。不过值得一看
-
metacpan.org/pod/Devel::Gladiator, metacpan.org/pod/Devel::MAT::Dumper,
pmat-explore-gtk -
我看不出 Devel::Peek 有什么帮助,但这就是 Devel::Cycle 的意义所在
-
如果你想检查一个特定的类是否有泄漏,你可以给它一个析构函数,看看它是否在你期望的时候被调用。