Как заставить отладчик Perl не останавливаться на «100 уровнях глубоко в вызовах подпрограмм»

Я работаю с большой, старой, грязной, раздутой платформой. Он регулярно проходит более 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 не заботиться о размере стека?

Спасибо.

31
задан Schwern 25 August 2010 в 02:56
поделиться

2 ответа

Добавьте строку:

$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;}
46
ответ дан 27 November 2019 в 22:23
поделиться

Schwern: как отмечено в комментариях к "лучшему ответу", это определенно часть плохо документированной системы. Однако, если вы действительно хотите помочь, взгляните на DB::Pluggable и мой плагин DB::Pluggable::Dumper для него. Можно проделать массу отличной работы, чтобы сделать работу с отладчиком почти увлекательной.

4
ответ дан 27 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: