Как заставить отладчик Perl не останавливаться на «100 уровнях в вызовах подпрограмм» - PullRequest
31 голосов
/ 25 августа 2010

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

Спасибо.

Ответы [ 2 ]

46 голосов
/ 25 августа 2010

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

$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;}
4 голосов
/ 25 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...