Всем привет! Есть необходимость подключиться к работающему перловому скрипту для отладки. Мне удается подключиться к процессу с помощью gdb+Enbugger<https://metacpan.org/pod/release/JJORE/Enbugger-2.013/lib/Enbugger.pod>, но при попытке поставить breakpoint на строку или вызов метода в модуле, отладчик всегда пишет, что не может её найти. С каноническим примером perl -E ' while(1) {...}' получается, а если соорудить минимальный скриптец с AE -- ни в какую.
Тестовый скрипт: *debug_test.pl <http://debug_test.pl>:* *#!/usr/bin/env perl* *use strict;* *use warnings;* *use AnyEvent;* *use lib 'lib';* *use DebugTest;* *my $cv = AE::cv;* *DebugTest->run();* *$cv->recv();* *lib/DebugTest.pm:* *package DebugTest;* *use v5.10;* *use strict;* *use warnings;* *my $timer_w;* *my $signal_w;* *our $i;* *sub run {* * $timer_w = AE::timer 1, 1, sub { _say( ++$i ) };* * $signal_w = AE::signal USR1 => sub { _say( 'USR1 received' ) };* *}* *sub _say {* * say @_; # <<<<<<< вот сюда бы breakpoint поставить* *}* *1;* Если запускать обычным способом perl -d debug_test.pl, breakpoint без проблем устанавливается и срабатывает. Если цепляться через gdb+Enbugger, не получается: *Enter h or `h h' for help, or `man perldebug' for more help.* *AnyEvent::Impl::EV::((eval 23)[/home/scripter/perl5/perlbrew/perls/perl-5.14.4/lib/site_perl/5.14.4/x86_64-linux/AnyEvent/Impl/EV.pm:88]:1):* *1: eval{require Enbugger;warn q(stopping);$ENV{PERLDB_OPTS}='RemotePort=localhost:4000';Enbugger->stop;};print STDERR $@* * DB<1> * * DB<2> l* *1==> eval{require Enbugger;warn q(stopping);$ENV{PERLDB_OPTS}='RemotePort=localhost:4000';Enbugger->stop;};print STDERR $@* *2 ;* * DB<2> T* *$ = eval 'eval{require Enbugger;warn q(stopping);$ENV{PERLDB_OPTS}=\'RemotePort=localhost:4000\';Enbugger->stop;};print STDERR $@' called from file `/home/scripter/perl5/perlbrew/perls/perl-5.14.4/lib/site_perl/5.14.4/x86_64-linux/AnyEvent/Impl/EV.pm' line 88* *. = AnyEvent::CondVar::Base::_wait(ref(AnyEvent::CondVar)) called from file `/home/scripter/perl5/perlbrew/perls/perl-5.14.4/lib/site_perl/5.14.4/x86_64-linux/AnyEvent.pm' line 1981* *. = AnyEvent::CondVar::Base::recv(ref(AnyEvent::CondVar)) called from file `debug_test.pl <http://debug_test.pl>' line 16* * DB<2> p $DebugTest::i * *6* * DB<3> b DebugTest::_say* *Subroutine DebugTest::_say not found.* * DB<4> * Может кто знает как это побороть? -- С уважением, Вадим Власов т.: +7 (916) 424-00-72
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
