А чем он в моем слуае поможет? Я к процессу прицепиться-то могу и глобальные переменные посмотреть и методы подергать. Тут речь больше не об отладке в процессе разработки, а о возможности посмотреть уже работающий код, который при редком непонятном стечении обстоятельств начинает себя как-нибудь странно вести. Пример просто демонстрирует проблему.
6 декабря 2013 г., 11:56 пользователь Dmitry Simonov <[email protected]>написал: > Вадим! У 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 > > -- С уважением, Вадим Власов т.: +7 (916) 424-00-72
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
