gpt4 book ai didi

perl - 如何使Perl调试器不停止在 “100 levels deep in subroutine calls”

转载 作者:行者123 更新时间:2023-12-03 08:55:40 25 4
gpt4 key购买 nike

我正在使用一个大型的,旧的,凌乱的,肿的框架。它经常在子例程调用中深入到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;}

关于perl - 如何使Perl调试器不停止在 “100 levels deep in subroutine calls”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com