![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Pour débugger en perl et avoir un équivalent du sh -x du shell, il faut le module b(Trace.pm).
Celui-ci se trouve sur le site CPAN (Comprehensive Perl Archive Network).
Pour ceux qui ne connaitrit pas, c'est un réseau complet d'archives Perl où l'on trouve des logiciels, de la documentation, des bibliothèques de fonctions, des utilitaires écrits en langage Perl, ou en autres langages (pourvu que ce soit accessible en Perl),
Le module se trouve sur https://metacpan.org/pod/Devel::Trace. @h1 installation
Deux manière de faire pour installer le module.
Il faut créer un répertoire Devel (en respectant la case) puis copier dans ce répertoire le module Trace.pm et enfin forcer la variable PERLIB vers le répertoire que l'on vient de créer.
mkdir Devel cp Trace.pm Devel export PERL5LIB=.
installer le module dans un répertoire de la liste @INC. On peut trouver cette liste avec la commande perl -V.
Built under linux Compiled at Sep 24 2021 16:10:58 %ENV: PERL5LIB="." @INC: . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32Makefile.PL /usr/local/lib/site_perl
perl Makefile.PL Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Devel::Trace Writing MYMETA.yml and MYMETA.json make cp demo.pl blib/lib/Devel/demo.pl cp Trace.pm blib/lib/Devel/Trace.pm Manifying 1 pod document
Pour démontrer comment utiliser Trace on va écrire un script de test nommé test:
#!/usr/bin/perl print "debut\n"; print "subroutine ", &sub(), " \n"; for (my $i = 0; $i <= 2; $i++) { print "$i\n"; } exit 0; sub sub { print "Dans la subroutine.\n"; return 10; }cons
L'exécution donne:
perl -d:Trace test >> test:4: print "debut\n"; debut >> test:5: print "subroutine ", &sub(), " \n"; >> test:14: print "Dans la subroutine.\n"; Dans la subroutine. >> test:15: return 10; subroutine 10 >> test:7: for (my $i = 0; $i <= 2; $i++) { >> test:8: print "$i\n"; 0 >> test:8: print "$i\n"; 1 >> test:8: print "$i\n"; 2 >> test:10: exit 0;
Il est possible de désactiver au sein du script le mode trace avec
$Devel::Trace::TRACE = 1; # Enable $Devel::Trace::TRACE = 0; # Disable
ou
Devel::Trace::trace('on'); # Enable Devel::Trace::trace('off'); # Disabl
Le script précédent transformé en
#!/usr/bin/perl print "debut\n"; Devel::Trace::trace('off'); print "subroutine ", &sub(), " \n"; Devel::Trace::trace('on'); for (my $i = 0; $i <= 2; $i++) { print "$i\n"; } exit 0; sub sub { print "Dans la subroutine.\n"; return 10; }cons
Donne à l'exécution :
>> test:4: print "debut\n"; debut >> test:6: Devel::Trace::trace('off'); >> Devel/Trace.pm:31: my $arg = shift; >> Devel/Trace.pm:32: $arg = $tracearg{$arg} while exists $tracearg{$arg}; >> Devel/Trace.pm:33: $TRACE = $arg; Dans la subroutine. subroutine 10 >> test:11: for (my $i = 0; $i <= 2; $i++) { >> test:12: print "$i\n"; 0 >> test:12: print "$i\n"; 1 >> test:12: print "$i\n"; 2te liste avec la commande perl -V.Built under linux Compiled at Sep 24 2021 16:10:58 %ENV: PERL5LIB="." @INC: . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32Makefile.PL /usr/local/lib/site_perl
la méthode correcte
cons La manière d'installer un module perl sur son système (les méthodes présentées précédement sont destinées à une utilisation temporaire du module Trace) est la méthode classique basée sur le fichier Makefile.PL qui génère un fichier Makefile d'installation.perl Makefile.PL Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Devel::Trace Writing MYMETA.yml and MYMETA.json make cp demo.pl blib/lib/Devel/demo.pl cp Trace.pm blib/lib/Devel/Trace.pm Manifying 1 pod document
utilisation
Pour démontrer comment utiliser Trace on va écrire un script de test nommé test:
#!/usr/bin/perl print "debut\n"; print "subroutine ", &sub(), " \n"; for (my $i = 0; $i <= 2; $i++) { print "$i\n"; } exit 0; sub sub { print "Dans la subroutine.\n"; return 10; }cons
L'exécution donne:
perl -d:Trace test >> test:4: print "debut\n"; debut >> test:5: print "subroutine ", &sub(), " \n"; >> test:14: print "Dans la subroutine.\n"; Dans la subroutine. >> test:15: return 10; subroutine 10 >> test:7: for (my $i = 0; $i <= 2; $i++) { >> test:8: print "$i\n"; 0 >> test:8: print "$i\n"; 1 >> test:8: print "$i\n"; 2 >> test:10: exit 0;
Il est possible de désactiver au sein du script le mode trace avec
$Devel::Trace::TRACE = 1; # Enable $Devel::Trace::TRACE = 0; # Disableou
Devel::Trace::trace('on'); # Enable Devel::Trace::trace('off'); # DisablLe script précédent transformé en
#!/usr/bin/perl print "debut\n"; Devel::Trace::trace('off'); print "subroutine ", &sub(), " \n"; Devel::Trace::trace('on'); for (my $i = 0; $i <= 2; $i++) { print "$i\n"; } exit 0; sub sub { print "Dans la subroutine.\n"; return 10; }cons
Donne à l'exécution :
>> test:4: print "debut\n"; debut >> test:6: Devel::Trace::trace('off'); >> Devel/Trace.pm:31: my $arg = shift; >> Devel/Trace.pm:32: $arg = $tracearg{$arg} while exists $tracearg{$arg}; >> Devel/Trace.pm:33: $TRACE = $arg; Dans la subroutine. subroutine 10 >> test:11: for (my $i = 0; $i <= 2; $i++) { >> test:12: print "$i\n"; 0 >> test:12: print "$i\n"; 1 >> test:12: print "$i\n"; 2 >> test:14: exit 0;>> test:14: exit 0;