[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