In precedenza abbiamo discusso le basi di come scrivere ed eseguire un programma perl usando Perl Hello World Example.
In questo articolo, esaminiamo come eseguire il debug di un programma/script perl utilizzando debugger Perl , che è simile allo strumento gdb per il debug del codice C.
Per eseguire il debug di un programma perl, richiama il debugger perl usando "perl -d" come mostrato di seguito.
# perl -d ./perl_debugger.pl
Per comprendere in dettaglio i comandi del debugger perl, creiamo il seguente programma perl di esempio (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. Entra in Perl Debugger
# perl -d ./perl_debugger.pl
chiede,
DB<1>
2. Visualizza righe specifiche o istruzioni di subroutine utilizzando (l)
DB<1> l 10
10:il mio $modello;
DB<2> l get_pattern
11 {
12:my $pattern;
13:print “Enter search string:“;
14:chomp ($pattern =);
15:restituisce $modello;
16 }
3. Imposta il punto di interruzione sulla funzione get_pattern usando (b)
DB<3> b trova_file
4. Imposta il punto di interruzione su una riga specifica usando (b)
DB<4> b 44
5. Visualizza i punti di interruzione usando (L)
DB<5> L
./perl_debugger.pl:
22:my $pattern =shift;
break if (1)
44:print join “\n”,@ list;
interrompe se (1)
6. esecuzione passo passo utilizzando (s e n)
DB<5> s
main::(./perl_debugger.pl:39):$pattern =get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12:il mio $pattern;
L'opzione s e n esegue passo dopo passo ogni istruzione. L'opzione s entra nella subroutine. L'opzione n esegue la subroutine in un unico passaggio (superandola).
L'opzione s entra nella subroutine ma mentre n è l'opzione che eseguirebbe la subroutine (passandoci sopra).
7. Continua fino al punto di interruzione successivo (o numero di riga o subroutine) utilizzando (c)
DB<5> c
Inserisci la stringa di ricerca:perl
main::find_files(./perl_debugger.pl:22):
22:my $pattern =shift;
8. Continua fino al numero di riga specifico utilizzando (c)
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36:return @list;
9. Stampa il valore nella variabile specifica usando (p)
DB<6> p $modello
perl
DB<7> c
main::(./perl_debugger.pl:44):print join “\n”,@list;
DB<7> c
./perl_debugger.pl
Programma sottoposto a debug terminato. Utilizzare q per uscire o R per riavviare,
utilizzare o inibire_exit per evitare di interrompere dopo la fine del programma,
h q, h R o h o per ottenere ulteriori informazioni.
Dopo l'ultima operazione continua, l'output viene stampato sullo stdout come "./perl_debugger.pl" poiché corrisponde al modello "perl".
10. Ottieni i comandi di debug dal file (sorgente)
Il debugger Perl può ottenere il comando di debug dal file ed eseguirlo. Ad esempio, crea il file chiamato "debug_cmds" con i comandi di debug perl come,
c
p $modello
q
Si noti che R viene utilizzato per riavviare l'operazione (non è necessario chiudere e riavviare il debugger).
DB<7> R
DB<7> source debug_cmds
>> c
Enter stringa di ricerca:perl
./perl_debugger.pl
Programma sottoposto a debug terminato. Usa q per uscire o R per riavviare,
usa o inhibition_exit per evitare l'arresto dopo la fine del programma,
h q, h R o h o per ottenere ulteriori informazioni.
>> p $pattern
perl
>> q
Nota :Se sei relativamente nuovo in perl, fai riferimento al nostro articolo precedente:20 suggerimenti per la programmazione di Perl per principianti.
Riepilogo dei comandi del debugger perl
Le seguenti opzioni possono essere utilizzate una volta entrato nel debugger perl.
- h o h h – per la pagina della guida
- c – per continuare dall'esecuzione corrente fino al punto di interruzione, altrimenti fino al nome della subroutine o al numero di riga,
- p – per mostrare i valori delle variabili,
- b – per posizionare i punti di interruzione,
- L – per vedere i punti di interruzione impostati,
- d – per eliminare i punti di interruzione,
- s – per passare all'esecuzione della riga successiva.
- n – per scavalcare l'esecuzione della riga successiva, quindi se la riga successiva è chiamata a una subroutine, eseguirà la subroutine ma non vi discenderà per l'ispezione.
- file sorgente – per prendere i comandi di debug dal file.
- l subname – per vedere le istruzioni di esecuzione disponibili in una subroutine.
- q – per uscire dalla modalità debugger.