Вадим! У AE есть свой собственный дебаггер AnyEvent::Debug.
--- Dmitriy V. Simonov, Perl & Python programmer 2013/12/6 Вадим Власов <[email protected]> > Всем привет! > > Есть необходимость подключиться к работающему перловому скрипту для > отладки. > Мне удается подключиться к процессу с помощью > 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 > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
