How do I get the Perl debugger to not stop at “100 levels deep in subroutine calls”

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;}

Leave a Comment

tech