Yo prefiero el truco barato de la orden del depurador 'R' (reiniciar). Aquí está un ejemplo de programa:
#/usr/bin/perl -d
use strict;
use warnings;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new();
y vamos a suponer que queremos romper al método LWP :: agente de usuario de nuevo().Haga lo siguiente:
bash$ perl -d sample.pl --whatever-arguments
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(use_mech.pl:7): my $foo = WWW::Mechanize::Pluggable->new();
carga el módulo que desea establecer el punto de interrupción en:
DB<1> use LWP::UserAgent
impresión de su entrada @INC de averiguar qué archivo que acaba de cargar (tenía que hacer la 'f' comando):
DB<2> p $INC{"LWP/UserAgent.pm"}
/Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm
Cambiar a ese archivo con 'f':
DB<3> f /Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm
1 package LWP::UserAgent;
2
3: use strict;
4: use vars qw(@ISA $VERSION);
5
6: require LWP::MemberMixin;
7: @ISA = qw(LWP::MemberMixin);
8: $VERSION = "6.04";
9
10: use HTTP::Request();
Queremos romper en la nueva(), por lo que resulta:
DB<4> /new
20: sub new
encontrar la primera instrucción ejecutable en la sub través de 'L':
DB<5> l
20 sub new
21 {
22 # Check for common user mistake
23: Carp::croak("Options to LWP::UserAgent should be key/value pairs, not hash reference")
24 if ref($_[1]) eq 'HASH';
25
26: my($class, %cnf) = @_;
27
28: my $agent = delete $cnf{agent};
29: my $from = delete $cnf{from};
Establecer un punto de interrupción en esta línea:
DB<5> b 23
Reiniciar el depurador:
DB<6> R
Warning: some settings and command-line options may be lost!
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(use_mech.pl:7): my $foo = WWW::Mechanize::Pluggable->new();
Ejecuta el programa y rompes en el punto que deseas.
DB<6> c
LWP::UserAgent::new(/Users/joemcmahon/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/LWP/UserAgent.pm:23):
23: Carp::croak("Options to LWP::UserAgent should be key/value pairs, not hash reference")
24: if ref($_[1]) eq 'HASH';
DB<6>
Esta técnica es particularmente útil para la depuración de problemas de importación(); puedes cargar el módulo que está teniendo problemas. establecer un punto de interrupción en la importación(), y luego reiniciar. El depurador se detendrá en la importación() del módulo que le interesa.
Nunca pude resolver esto. Voy a aceptar la respuesta votada para que esta pregunta no quede sin respuesta. – Morinar