У меня следующий скрипт perl
#!/usr/bin/env perl
sub bar { foo() }
sub foo { }
sub hello { bar(); }
hello();
, который выдает следующий вывод
$ PERLDB_OPTS="NonStop frame=1" perl -d 1.pl > /dev/null
Package 1.pl.
entering DB::Obj::_init
entering main::hello
entering main::bar
entering main::foo
Мне нужно включить отладчик только перед вызовом функции bar()
.Как это сделать?
То, что я пробовал:
1) Enbugger + DB::parse_options
$ cat 1.pl
#!/usr/bin/env perl
sub bar { foo() }
sub foo { }
sub hello {
require Enbugger;
Enbugger->load_debugger();
DB::parse_options("NonStop frame=1");
bar();
Enbugger->stop;
}
hello();
$ perl 1.pl > /dev/null
entering CODE(0x1c551d0)
entering CODE(0x1d23018)
entering strict::import
entering CODE(0x1d23ac8)
Package /usr/lib/x86_64-linux-gnu/perl/5.22/Errno.pm.
entering Errno::TIEHASH
entering CODE(0x1c551b8)
entering CODE(0x1d72b40)
entering strict::import
Package /usr/lib/x86_64-linux-gnu/perl/5.22/Tie/Hash/NamedCapture.pm.
entering XSLoader::load
NonStop = '1'
frame = '1'
entering CODE(0x1bdeca8)
entering warnings::unimport
похоже, работает причинаесли я изменю на frame=2
, будет больше выходных данных.Но вывод неправильный, ожидается:
Package 1.pl.
entering DB::Obj::_init
entering main::bar
entering main::foo
2) Глобальные переменные БД :
$ cat 1.pl
#!/usr/bin/env perl
sub bar { foo() }
sub foo { }
sub hello {
require "perl5db.pl";
$DB::signal = 1;
bar();
$DB::single = 1;
}
hello();
$ PERLDB_OPTS="NonStop frame=1" perl 1.pl > /dev/null
нет вывода: (