Dans cet article, examinons comment déboguer un programme/script perl en utilisant le débogueur Perl , qui est similaire à l'outil gdb pour le débogage du code C.
Pour déboguer un programme perl, appelez le débogueur perl en utilisant "perl -d" comme indiqué ci-dessous.
# perl -d ./perl_debugger.pl
Pour comprendre en détail les commandes du débogueur perl, créons l'exemple de programme perl suivant (perl_debugger.pl).
$ cat perl_debugger.pl #!/usr/bin/perl -w # Script to list out the filenames (in the pwd) that contains specific pattern. #Enabling slurp mode $/=undef; # Function : get_pattern # Description : to get the pattern to be matched in files. sub get_pattern { my $pattern; print "Enter search string: "; chomp ($pattern = <> ); return $pattern; } # Function : find_files # Description : to get list of filenames that contains the input pattern. sub find_files { my $pattern = shift; my (@files,@list,$file); # using glob, obtaining the filenames, @files = <./*>; # taking out the filenames that contains pattern. @list = grep { $file = $_; open $FH,"$file"; @lines = <$FH>; $count = grep { /$pattern/ } @lines; $file if($count); } @files; return @list; } # to obtain the pattern from STDIN $pattern = get_pattern(); # to find-out the list of filenames which has the input pattern. @list = find_files($pattern); print join "\n",@list;
1. Entrez le débogueur Perl
# perl -d ./perl_debugger.pl
il demande,
DB<1>
2. Afficher des lignes spécifiques ou des instructions de sous-programme à l'aide de (l)
DB<1> l 10
10 :mon $pattern ;
DB<2> l get_pattern
11 {
12 :my $pattern ;
13 :print "Entrez la chaîne de recherche : " ;
14 :chomp ($pattern =);
15 :renvoie $motif ;
16 }
3. Définissez le point d'arrêt sur la fonction get_pattern en utilisant (b)
BD<3> b find_files
4. Définissez le point d'arrêt sur une ligne spécifique à l'aide de (b)
DB<4> b 44
5. Afficher les points d'arrêt à l'aide de (L)
DB<5> L
./perl_debugger.pl :
22 :my $pattern =shift ;
break if (1)
44 :print join "\n",@ liste ;
séparer si (1)
6. exécution pas à pas avec (s et n)
DB<5> s
main::(./perl_debugger.pl:39):$pattern =get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12 :mon $pattern ;
Les options s et n effectuent l'exécution pas à pas de chaque instruction. Les options entrent dans la sous-routine. L'option n exécute la sous-routine en une seule étape (en la parcourant).
L'option s entre dans la sous-routine mais tandis que l'option n exécuterait la sous-routine (en la parcourant).
7. Continuer jusqu'au prochain point d'arrêt (ou numéro de ligne, ou sous-programme) en utilisant (c)
DB<5> c
Entrez la chaîne de recherche :perl
main::find_files(./perl_debugger.pl:22):
22 :my $pattern =shift;
8. Continuez jusqu'au numéro de ligne spécifique en utilisant (c)
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36 :return @list ;
9. Imprimer la valeur dans la variable spécifique en utilisant (p)
DB<6> p $motif
perl
DB<7> c
main::(./perl_debugger.pl:44) :print join "\n",@list;
DB<7> c
./perl_debugger.pl
Programme débogué terminé. Utilisez q pour quitter ou R pour redémarrer,
utilisez o inhibit_exit pour éviter l'arrêt après la fin du programme,
h q, h R ou h o pour obtenir des informations supplémentaires.
Après la dernière opération continue, la sortie est imprimée sur la sortie standard sous la forme "./perl_debugger.pl" car elle correspond au modèle "perl".
10. Obtenir les commandes de débogage à partir du fichier (source)
Le débogueur Perl peut obtenir la commande de débogage du fichier et l'exécuter. Par exemple, créez le fichier appelé "debug_cmds" avec les commandes de débogage perl comme,
c
p $motif
q
Notez que R est utilisé pour redémarrer l'opération (inutile de quitter et de redémarrer le débogueur).
DB<7> R
DB<7> source debug_cmds
>> c
Entrée chaîne de recherche :perl
./perl_debugger.pl
Programme débogué terminé. Utilisez q pour quitter ou R pour redémarrer,
utilisez o inhibit_exit pour éviter l'arrêt après la fin du programme,
h q, h R ou h o pour obtenir des informations supplémentaires.
>> p $pattern
perl
>>q
Remarque :Si vous êtes relativement novice en perl, référez-vous à notre article précédent :20 astuces de programmation perl pour les débutants.
Résumé des commandes du débogueur Perl
Les options suivantes peuvent être utilisées une fois que vous entrez dans le débogueur perl.
- h ou h h – pour la page d'aide
- c - pour continuer depuis l'exécution en cours jusqu'au point d'arrêt, sinon jusqu'au nom du sous-programme ou au numéro de ligne,
- p – pour afficher les valeurs des variables,
- b – pour placer les points d'arrêt,
- L - pour voir les points d'arrêt définis,
- d – pour supprimer les points d'arrêt,
- s - pour passer à l'exécution de la ligne suivante.
- n - pour passer au-dessus de l'exécution de la ligne suivante, donc si la ligne suivante est un appel de sous-programme, il exécutera le sous-programme mais ne descendra pas dedans pour inspection.
- fichier source - pour prendre les commandes de débogage du fichier.
- l subname – pour voir les instructions d'exécution disponibles dans une sous-routine.
- q – pour quitter le mode débogueur.