我正在使用一个大,老,凌乱,,肿的框架。它在子程序调用中经常超过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 "$x\n"; 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;}