[Moscow.pm] Enbugger + gdb + AE

Dmitry Simonov dsimonov на gmail.com
Чт Дек 5 23:56:39 PST 2013


Вадим! У AE есть свой собственный дебаггер AnyEvent::Debug.

---
Dmitriy V. Simonov,
Perl & Python programmer


2013/12/6 Вадим Власов <scripter.vrn на gmail.com>

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


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