Je préfère le truc pas cher de commande 'R' (redémarrage) du débogueur. Voici un exemple de programme:
#/usr/bin/perl -d
use strict;
use warnings;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new();
et supposons que nous voulons briser à la méthode nouvelle() de LWP :: UserAgent.Pour ce faire:
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();
Chargez le module que vous souhaitez définir le point d'arrêt dans:
DB<1> use LWP::UserAgent
Imprimer son entrée @INC pour savoir ce que votre fichier vient d'être chargé (besoin de faire la commande « f »):
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
basculer vers ce fichier avec '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();
Nous voulons briser dans la nouvelle(), trouver il:
DB<4> /new
20: sub new
Trouver la première instruction exécutable dans la sous via '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};
Définir un point d'arrêt sur cette ligne:
DB<5> b 23
Redémarrez le débogueur:
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();
Exécutez le programme et vous cassez au point voulu. Cette technique est particulièrement utile pour le débogage de problèmes import(); vous pouvez charger le module qui rencontre des problèmes. Définissez un point d'arrêt dans import(), puis redémarrez. Le débogueur s'arrêtera dans import() pour le module qui vous intéresse.
Je n'ai jamais été capable de comprendre cela. Aller à accepter la réponse upvoted juste pour que cette question ne soit pas laissée sans réponse. – Morinar