Add the line:
$DB::deep = 500; # or more if necessary
to the start of your program.
The following program runs to completion in the debugger:
use strict;
use warnings;
sub f($) {
my $x = shift;
print "$x\n";
if ($x < 200) {
f(1 + $x);
}
}
$DB::deep = 500;
f(1);
outputting:
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> _
Without the $DB::deep = 500;
line, it stops at 100, the same as yours:
97
98
99
main::f(qq.pl:4): my $x = shift;
100 levels deep in subroutine calls!
DB<1> _
That’s been tested successfully up to a stack depth of 50,000 (use 50000 in the if
statement and set $DB::deep
to 50001). If your stack depth is greater than that, I suspect you should be re-engineering rather than debugging 🙂
By the way, if you don’t want to touch the code at all, you can change that value in the debugger before running your code – just enter $Db::deep=500;
before you enter c
to run the code, or just set it in your .perldb
file:
BEGIN {$DB::deep = 500;}