gpt4 book ai didi

perl - 是否可以在调试器下只运行特定的子程序?

转载 作者:行者123 更新时间:2023-12-05 01:01:47 27 4
gpt4 key购买 nike

我只想打印特定子程序的堆栈跟踪。可能吗 ?脚本在没有 -d 选项的 perl 下运行。

简单的例子:

#!/usr/bin/env perl

foo();

sub foo {
print "Hello world\n";
# enable debugger from this moment with PERLDB_OPTS='NonStop frame=1'
bar();
# disable debugger from this moment
return;
}

sub bar {
print "Just another Perl hacker\n";
return;
}

预期输出:

$ perl test.pl 
Hello world
entering main::bar
Just another Perl hacker

我尝试使用 $ENV{PERL5DB} 但没有效果:

$ENV{PERL5DB}='sub DB::DB {} sub sub {print ++$i, " $sub\n"; &$sub}';
bar();
$ENV{PERL5DB} = undef;

最佳答案

您可以直接从您的代码中设置$DB::frame:

#!/usr/bin/env perl

foo();

sub foo {
print "Hello world\n";
$DB::frame = 1;
bar();
$DB::frame = 0;
return;
}

sub bar {
print "Just another Perl hacker\n";
return;
}

这可以按如下方式运行:

$ PERLDB_OPTS=NonStop perl -d try.pl
Hello world
entering main::bar
Just another Perl hacker

就是这样。


如果您想手动执行并定义您自己的自定义调试器,您可以按如下方式进行:

#!/usr/bin/env perl

foo();

sub foo {
print "Hello world\n";
$DB::xtrace = 1;
bar();
$DB::xtrace = 0;
return;
}

sub bar {
print "Just another Perl hacker\n";
return;
}
$ PERL5DB='BEGIN { package DB; sub DB {} sub sub { print STDERR "    entering $sub\n" if $xtrace; &$sub } }' perl -d try.pl
Hello world
entering main::bar
Just another Perl hacker

关于perl - 是否可以在调试器下只运行特定的子程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com