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.