Ответ 1
Добавьте строку:
$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 (используйте 50000 в инструкции if
и установите $DB::deep
на 50001). Если ваша глубина стека больше, чем у меня, я подозреваю, что вам нужно переконфигурировать, а не отлаживать: -)
Кстати, если вы вообще не хотите прикасаться к коду, вы можете изменить это значение в отладчике перед запуском своего кода - просто введите $Db::deep=500;
, прежде чем вводить c
для запуска кода, или просто установите его в свой .perldb
файл:
BEGIN {$DB::deep = 500;}