<div dir="ltr">Вадим! У AE есть свой собственный дебаггер AnyEvent::Debug.</div><div class="gmail_extra"><br clear="all"><div>---<br>Dmitriy V. Simonov,<br>Perl & Python programmer</div>
<br><br><div class="gmail_quote">2013/12/6 Вадим Власов <span dir="ltr"><<a href="mailto:scripter.vrn@gmail.com" target="_blank">scripter.vrn@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div>Всем привет!</div><div><br></div><div>Есть необходимость подключиться к работающему перловому скрипту для отладки.<br>Мне удается подключиться к процессу с помощью gdb+<a href="https://metacpan.org/pod/release/JJORE/Enbugger-2.013/lib/Enbugger.pod" target="_blank">Enbugger</a>, но при попытке поставить breakpoint на строку или вызов метода в модуле, отладчик всегда пишет, что не может её найти.</div>


<div>С каноническим примером perl -E ' while(1) {...}' получается, а если соорудить минимальный скриптец с AE -- ни в какую.</div><div><br></div><div>Тестовый скрипт:</div><div><br></div><div><div><b><a href="http://debug_test.pl" target="_blank">debug_test.pl</a>:</b><br>


</div><div><i>#!/usr/bin/env perl</i></div><div><i><br></i></div><div><i>use strict;</i><br></div><div><i>use warnings;</i></div><div><i><br></i></div><div><i>use AnyEvent;</i></div><div><i>use lib 'lib';<br></i></div>


<div><i>use DebugTest;</i></div><div><i><br></i></div><div><i>my $cv = AE::cv;</i></div><div><i>DebugTest->run();<br></i></div><div><i>$cv->recv();</i><br></div></div><div><br></div><div><br></div><div><div><b>lib/DebugTest.pm:</b></div>


<div><i>package DebugTest;</i></div><div><i><br></i></div><div><i>use v5.10;</i></div><div><i>use strict;</i></div><div><i>use warnings;</i></div><div><i><br></i></div><div><i>my $timer_w;</i></div><div><i>my $signal_w;</i></div>


<div><i><br></i></div><div><i>our $i;</i></div><div><i><br></i></div><div><i>sub run {</i></div><div><i>  $timer_w  = AE::timer 1, 1, sub { _say( ++$i ) };</i></div><div><i>  $signal_w = AE::signal USR1 => sub { _say( 'USR1 received' ) };</i></div>


<div><i>}</i></div><div><i><br></i></div><div><i>sub _say {</i></div><div><i> say @_;    # <<<<<<< вот сюда бы breakpoint поставить</i></div><div><i>}</i></div><div><i><br></i></div><div><i>1;</i></div>


</div><div><br></div><div>Если запускать обычным способом perl -d <a href="http://debug_test.pl" target="_blank">debug_test.pl</a>, breakpoint без проблем устанавливается и срабатывает.<br></div><div>Если цепляться через gdb+Enbugger, не получается:</div>


<div><div><i>Enter h or `h h' for help, or `man perldebug' for more help.</i></div><div><i><br></i></div><div><i>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):</i></div>


<div><i>1:<span style="white-space:pre-wrap">       </span>eval{require Enbugger;warn q(stopping);$ENV{PERLDB_OPTS}='RemotePort=localhost:4000';Enbugger->stop;};print STDERR $@</i></div><div><i>  DB<1> </i></div>


<div><i>  DB<2> l</i></div><div><i>1==><span style="white-space:pre-wrap">        </span>eval{require Enbugger;warn q(stopping);$ENV{PERLDB_OPTS}='RemotePort=localhost:4000';Enbugger->stop;};print STDERR $@</i></div>


<div><i>2 <span style="white-space:pre-wrap">       </span>;</i></div><div><i>  DB<2> T</i></div><div><i>$ = 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</i></div>


<div><i>. = 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</i></div><div><i>. = AnyEvent::CondVar::Base::recv(ref(AnyEvent::CondVar)) called from file `<a href="http://debug_test.pl" target="_blank">debug_test.pl</a>' line 16</i></div>


<div><i>  DB<2> p $DebugTest::i   </i></div><div><i>6</i></div><div><i>  DB<3> b DebugTest::_say</i></div><div><i>Subroutine DebugTest::_say not found.</i></div><div><i>  DB<4> </i></div></div><div><br>

</div>
<div>Может кто знает как это побороть? <span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br><div dir="ltr"><div>  С уважением,<br></div><div>

  Вадим Власов</div><div>  т.: +7 (916) 424-00-72</div></div>
</font></span></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>