加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何跟踪对Perl对象的引用?

发布时间:2020-12-15 21:57:35 所属栏目:大数据 来源:网络整理
导读:我正在尝试修复我的代码以使Perl能够通过削弱引用和打破周期来恢复不需要的数据. 我最近在How to access Perl ref counts问了一个问题,答案对我来说效果很好. 对于我的一些对象,引用计数是 1,我不知道为什么. 有没有办法让我添加一个回调或什么来帮助我知道
我正在尝试修复我的代码以使Perl能够通过削弱引用和打破周期来恢复不需要的数据.

我最近在How to access Perl ref counts问了一个问题,答案对我来说效果很好.

对于我的一些对象,引用计数是> 1,我不知道为什么.

有没有办法让我添加一个回调或什么来帮助我知道引用计数何时递增?我想知道谁在引用一个对象.

解决方法

实现一个Devel :: XXX包来检查你的对象的refcounts?
package Devel::Something;
# just emulating Devel::Trace here
# see http://cpansearch.perl.org/src/MJD/Devel-Trace-0.10/Trace.pm
sub DB::DB {
    if ($Devel::Something::CHECK) {
        my ($package,$file,$linenumber) = caller;
        ... inspect current refcounts
        ... if any have changed,print out the details
        ...    including current package/file/linenumber
        $Devel::Something::CHECK = 0;  # disable until it's enabled again
    }
}
1;
# my program
... do some stuff ...
$Devel::Something::CHECK = 1;
... do some more stuff ...
$Devel::Something::CHECK = 1;
$perl -d:Something my_program.pl ...

您可以在整个代码中的适当位置撒上$Devel :: Something :: CHECK = 1语句,或者更改DB :: DB中的条件以定期运行(例如,if($Devel :: Something :: CHECK%100) == 0){每100次陈述评估后检查一次).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读