Zuvor haben wir die Grundlagen zum Schreiben und Ausführen eines Perl-Programms mit dem Perl-Hello-World-Beispiel besprochen.
Lassen Sie uns in diesem Artikel besprechen, wie man ein Perl-Programm / -Skript debuggt mit dem Perl-Debugger , das dem gdb-Tool zum Debuggen von C-Code ähnelt.
Um ein Perl-Programm zu debuggen, rufen Sie den Perl-Debugger mit „perl -d“ wie unten gezeigt auf.
# perl -d ./perl_debugger.pl
Um die Perl-Debugger-Befehle im Detail zu verstehen, erstellen wir das folgende Perl-Beispielprogramm (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. Geben Sie den Perl-Debugger
ein# perl -d ./perl_debugger.pl
es fordert auf,
DB<1>
2. Mit (l)
können Sie bestimmte Zeilen oder Subroutinenanweisungen anzeigen
DB<1> l 10
10:mein $muster;
DB<2> l get_pattern
11 {
12:my $pattern;
13:print „Enter search string:“;
14:chomp ($pattern =);
15:$Muster zurückgeben;
16 }
3. Setzen Sie den Haltepunkt für die get_pattern-Funktion mit (b)
DB<3> b find_files
4. Setzen Sie den Breakpoint auf eine bestimmte Zeile mit (b)
DB<4> b 44
5. Zeigen Sie die Haltepunkte mit (L)
an
DB<5> L
./perl_debugger.pl:
22:my $pattern =shift;
break if (1)
44:print join „\n“,@ list;
break if (1)
6. schrittweise Ausführung mit (s und n)
DB<5> s
main::(./perl_debugger.pl:39):$pattern =get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12:my $pattern;
Option s und n führt die schrittweise Ausführung der einzelnen Anweisungen aus. Option s springt in die Subroutine. Option n führt das Unterprogramm in einem einzigen Schritt aus (Übergehen).
Die s-Option springt in die Unterroutine, während die n-Option die Unterroutine ausführt (sie überspringt).
7. Fortfahren bis zum nächsten Haltepunkt (oder Zeilennummer oder Unterprogramm) mit (c)
DB<5> c
Suchbegriff eingeben:perl
main::find_files(./perl_debugger.pl:22):
22:my $pattern =shift;
8. Fahren Sie mit (c)
bis zur jeweiligen Zeilennummer fort
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36:return @list;
9. Drucken Sie den Wert in der spezifischen Variablen mit (p)
DB<6> p $pattern
perl
DB<7> c
main::(./perl_debugger.pl:44):print join „\n“,@list;
DB<7> c
./perl_debugger.pl
Debuggtes Programm beendet. Verwenden Sie q zum Beenden oder R zum Neustarten,
verwenden Sie ohibit_exit, um ein Stoppen nach dem Beenden des Programms zu vermeiden,
h q, h R oder h o, um zusätzliche Informationen zu erhalten.
Nach der letzten Continue-Operation wird die Ausgabe auf der Standardausgabe als „./perl_debugger.pl“ ausgegeben, da sie dem Muster „perl“ entspricht.
10. Holen Sie sich Debug-Befehle aus der Datei (Quelle)
Der Perl-Debugger kann den Debug-Befehl aus der Datei abrufen und ausführen. Erstellen Sie beispielsweise die Datei „debug_cmds“ mit den Perl-Debug-Befehlen als,
c
p $Muster
q
Beachten Sie, dass R verwendet wird, um die Operation neu zu starten (Sie müssen den Debugger nicht beenden und erneut starten).
DB<7> R
DB<7> source debug_cmds
>> c
Enter Suchstring:perl
./perl_debugger.pl
Debuggtes Programm beendet. Verwenden Sie q zum Beenden oder R zum Neustarten,
verwenden Sie ohibit_exit, um ein Stoppen nach dem Beenden des Programms zu vermeiden,
h q, h R oder h o, um zusätzliche Informationen zu erhalten.
>> p $pattern
perl
>> q
Hinweis :Wenn Perl für Sie relativ neu ist, lesen Sie unseren vorherigen Artikel:20 Perl-Programmiertipps für Anfänger.
Zusammenfassung der Perl-Debugger-Befehle
Die folgenden Optionen können verwendet werden, sobald Sie den Perl-Debugger aufgerufen haben.
- h oder h h – für Hilfeseite
- c – um von der aktuellen Ausführung bis zum Haltepunkt fortzufahren, andernfalls bis zum Unterprogrammnamen oder der Zeilennummer,
- p – um die Werte von Variablen anzuzeigen,
- b – um die Breakpoints zu setzen,
- L – um die gesetzten Breakpoints zu sehen,
- d – um die Breakpoints zu löschen,
- s – um in die nächste Zeilenausführung zu springen.
- n – um die Ausführung der nächsten Zeile zu überspringen, wenn also die nächste Zeile ein Unterroutinenaufruf ist, würde sie die Unterroutine ausführen, aber nicht zur Inspektion hineingehen.
- Quelldatei – um die Debug-Befehle aus der Datei zu übernehmen.
- l subname – um die Ausführungsanweisungen zu sehen, die in einer Subroutine verfügbar sind.
- q – um den Debugger-Modus zu verlassen.