Dříve jsme diskutovali o základech, jak napsat a spustit program v perlu pomocí příkladu Perl Hello World.
V tomto článku se podíváme na to, jak ladit program / skript v perlu pomocí ladicího programu Perl , který je podobný nástroji gdb pro ladění kódu C.
Chcete-li ladit program v perlu, vyvolejte debugger perl pomocí „perl -d“, jak je uvedeno níže.
# perl -d ./perl_debugger.pl
Abychom podrobně porozuměli příkazům ladicího programu perl, vytvořte si následující ukázkový program perl (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. Zadejte Perl Debugger
# perl -d ./perl_debugger.pl
vyzve to,
DB<1>
2. Prohlédněte si konkrétní řádky nebo příkazy podprogramu pomocí (l)
DB<1> l 10
10:můj $vzor;
DB<2> l get_pattern
11 {
12:můj $vzor;
13:print “Zadejte vyhledávací řetězec:“;
14:chomp ($vzor =);
15:return $pattern;
16 }
3. Nastavte bod přerušení na funkci get_pattern pomocí (b)
DB<3>b najít_soubory
4. Nastavte zarážku na konkrétním řádku pomocí (b)
DB<4>b 44
5. Zobrazte zarážky pomocí (L)
DB<5> L
./perl_debugger.pl:
22:můj $vzor =posun;
přerušit, pokud (1)
44:tisknout spojení „\n“,@ list;
break if (1)
6. krok za krokem provádění pomocí (s a 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;
Volby s a n provádějí krok za krokem každý příkaz. Možnost s vstoupí do podprogramu. Možnost n provede podprogram v jediném kroku (překročení).
Volba s provede krokování do podprogramu, ale zatímco volba n, která by provedla podprogram (překročení).
7. Pokračujte do dalšího bodu přerušení (nebo čísla řádku nebo podprogramu) pomocí (c)
DB<5> c
Zadejte vyhledávací řetězec:perl
main::find_files(./perl_debugger.pl:22):
22:my $pattern =shift;
8. Pokračujte dolů na konkrétní číslo řádku pomocí (c)
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36:return @list;
9. Vytiskněte hodnotu v konkrétní proměnné pomocí (p)
DB<6> p $pattern
perl
DB<7> c
main::(./perl_debugger.pl:44):tisknout spojení „\n“,@list;
DB<7> c
./perl_debugger.pl
Odladěný program byl ukončen. Použijte q pro ukončení nebo R pro restart,
použijte o inhibitor_exit, abyste se vyhnuli zastavení po ukončení programu,
h q, h R nebo h o pro získání dalších informací.
Po poslední operaci pokračování se výstup vytiskne na stdout jako „./perl_debugger.pl“, protože odpovídá vzoru „perl“.
10. Získejte ladicí příkazy ze souboru (zdroje)
Debugger Perl může získat příkaz debug ze souboru a spustit jej. Například vytvořte soubor s názvem „debug_cmds“ pomocí příkazů perl debug jako,
c
p $vzor
q
Všimněte si, že R se používá k restartování operace (není třeba ukončovat a znovu spouštět ladicí program).
DB<7> R
DB<7> zdroj debug_cmds
>> c
Enter hledaný řetězec:perl
./perl_debugger.pl
Laděný program ukončen. Použijte q pro ukončení nebo R pro restart,
použijte o inhibitor_exit, abyste se vyhnuli zastavení po ukončení programu,
h q, h R nebo h o pro získání dalších informací.
>> p $pattern
perl
>> q
Poznámka :Pokud jste v perlu relativně nováčci, podívejte se na náš předchozí článek:20 tipů na programování v perlu pro začátečníky.
Shrnutí příkazů ladicího programu perl
Následující možnosti lze použít, jakmile vstoupíte do ladicího programu perl.
- h nebo h h – zobrazí se stránka nápovědy
- c – pokračovat dolů od aktuálního provádění do bodu přerušení, jinak do názvu podprogramu nebo čísla řádku,
- p – zobrazení hodnot proměnných,
- b – pro umístění zarážek,
- L – zobrazí se nastavené body přerušení,
- d – smaže zarážky,
- s – pro přechod na spuštění dalšího řádku.
- n – překročí spuštění dalšího řádku, takže pokud je další řádek voláním podprogramu, provede podprogram, ale nespustí se do něj za účelem kontroly.
- zdrojový soubor – převezme ladicí příkazy ze souboru.
- l subname – pro zobrazení příkazů provedení dostupných v podprogramu.
- q – pro ukončení režimu ladění.