Как запустить блок кода Perl под отладчиком? - PullRequest
0 голосов
/ 08 января 2019

Я пишу тест для моего отладчика.

subtest "main" => sub {
    $ENV{PERL5DB} = 'Devel::AllSubs';
    my $stderr = capture_stderr {
        sub foo { bar(); }
        sub bar { 1; }
        foo();
    };
    $ENV{PERL5DB} = '';
    is $stderr, "main::foo\nmain::bar";
};

Как применить отладчик к

{
sub foo { bar(); }
sub bar { 1; }
foo();
}

блок?

Я пытался использовать $ENV{PERL5DB}, но без эффекта.

1 Ответ

0 голосов
/ 08 января 2019

Вы не можете использовать $ENV{PERL5DB} так, как хотите.

  1. Это должна быть полная команда для загрузки в коде отладчика, например use Devel::AllSubs
  2. Проверяется только тогда, когда Perl запускается с голым -d переключателем
  3. Проверяется только при запуске Perl, поскольку Perl должен знать, что он запускает сценарий в отладчике для создания кодов операций, необходимых для входа в отладчик.

Таким образом, чтобы применить отладчик только к части кода, вам необходимо сначала загрузить его с помощью ключа -d, как этот

perl -d:AllSubs script.pl

и затем используйте переменную пакета, чтобы решить, хотите ли вы обрабатывать код или нет. Глядя на название вашего модуля, я предполагаю, что вы пытаетесь что-то сделать с каждой подпрограммой, поэтому ваш тест, вероятно, хочет быть в вашем DB::sub методе

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