Perl调试器是否支持中断die
?
我发现自己经常运行程序一次找到die
行,然后第二次运行它来设置断点。
如果可以使调试器在die
上自动中断,保持垂死的上下文,那就太好了。
答案 0 :(得分:3)
您可以设置__DIE__
处理程序并在其中设置断点。
$SIG{__DIE__} = sub {
$DB::single = 1;
die @_;
};
这不是一个很好的答案,因为在__DIE__
处理程序中你没有调用die
函数的上下文。但是可以访问全局包变量,如果您使用调试器命令y 1
或y 1 <pattern>
安装了PadWalker
,则可以在die
时查看范围内的词法变量被叫了。
证明的概念:
# dying.pl
$SIG{__DIE__} = sub { $DB::single = 1; die @_; };
for my $i (1 .. 10000) {
my $j = sqrt($i * ($i+1)) - 0.49;
die "$i $j" if $j - int($j) < 0.1;
}
$ perl -d dying.pl
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(dying.pl:1): $SIG{__DIE__} = sub { $DB::single = 1; die @_; };
DB<1> c
main::CODE(0x1000c918)(dying.pl:1):
1: $SIG{__DIE__} = sub { $DB::single = 1; die @_; };
DB<1> y 1 j
$j = 13.000737563232
DB<2> y 1
$i = 13
$j = 13.000737563232
DB<3> c
13 13.000737563232 at dying.pl line 5.
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<3>