[Moscow.pm] Enbugger + gdb + AE

Вадим Власов scripter.vrn на gmail.com
Чт Дек 5 13:31:19 PST 2013


Всем привет!

Есть необходимость подключиться к работающему перловому скрипту для отладки.
Мне удается подключиться к процессу с помощью
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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131206/e2176340/attachment.html>


Подробная информация о списке рассылки Moscow-pm