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

如何让Perl调试器不停止在“100级深层次的子程序调用”

发布时间:2020-12-15 21:24:43 所属栏目:大数据 来源:网络整理
导读:我正在使用一个大,老,凌乱,,肿的框架。它在子程序调用中经常超过100级。 Perl调试器认为适合停止并通知我这个事实…一遍又一遍。 Package::Stash::name(/usr/local/perl/5.10.1/lib/site_perl/5.10.1/Package/Stash.pm:21):21: return $_[0]-{package};1
我正在使用一个大,老,凌乱,,肿的框架。它在子程序调用中经常超过100级。 Perl调试器认为适合停止并通知我这个事实…一遍又一遍。
Package::Stash::name(/usr/local/perl/5.10.1/lib/site_perl/5.10.1/Package/Stash.pm:21):
21:     return $_[0]->{package};
100 levels deep in subroutine calls!
  DB<1>

如何使Perl调试器不关心堆栈有多大?

谢谢。

解决方法

添加行:
$DB::deep = 500; # or more if necessary

到您的程序的开始。

以下程序在调试器中运行完成:

use strict;
use warnings;
sub f($) {
        my $x = shift;
        print "$xn";
        if ($x < 200) {
                f(1 + $x);
        }
}
$DB::deep = 500;
f(1);

输出:

198
199
200
Debugged program terminated.  Use q to quit or R to restart,use o inhibit_exit to avoid stopping after program termination,h q,h R or h o to get additional info.
  DB<1> _

没有$ DB :: deep = 500;线,它停在100,与你的相同:

97
98
99
main::f(qq.pl:4):               my $x = shift;
100 levels deep in subroutine calls!
  DB<1> _

这已经成功测试了堆栈深度为50,000(在if语句中使用50000,并将$ DB :: deep设置为50001)。如果你的堆栈深度大于那,我怀疑你应该重新设计,而不是调试:-)

顺便说一下,如果你不想触摸代码,你可以在运行你的代码之前在调试器中改变这个值 – 只需输入$ Db :: deep = 500;在输入c之前运行代码,或者只是将其设置在.perldb文件中:

BEGIN {$DB::deep = 500;}

(编辑:李大同)

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

    推荐文章
      热点阅读