如何在调试器下运行perl代码块?

问题描述 投票:2回答:1

我正在为我的调试器编写测试。

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}但没有效果。

perl debugging
1个回答
4
投票

你不能以你想要的方式使用$ENV{PERL5DB}

  1. 它必须是加载调试器代码(例如use Devel::AllSubs)的完整命令
  2. 只有当Perl以裸-d开关启动时才会检查它
  3. 只有在Perl启动时才会检查它,因为Perl需要知道它正在调试器下运行脚本以创建进入调试器所需的操作码。

因此,为了将调试器仅应用于部分代码,您需要首先使用-d开关加载它,如下所示

perl -d:AllSubs script.pl

然后使用包变量来决定是否要处理代码。看看你的模块名称我假设你正在尝试对每个子程序做一些事情,所以你的测试可能想要在你的DB::sub方法中

© www.soinside.com 2019 - 2024. All rights reserved.