Einführung in den Perl Debugger (PDF) - Thomas Fahle
Einführung in den Perl Debugger (PDF) - Thomas Fahle
Einführung in den Perl Debugger (PDF) - Thomas Fahle
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Perl</strong><br />
Doppelpunkte (:) nach der Zeilennummer zeigen an, wo<br />
Breakpo<strong>in</strong>ts oder Aktionen (s.u.) gesetzt wer<strong>den</strong> können. Der<br />
nach rechts zeigende Pfeil (==>) gibt die aktuelle Position im<br />
Programm an.<br />
Das Programm ausführen (cont<strong>in</strong>ue)<br />
Das Kommando c [l<strong>in</strong>e|sub] (cont<strong>in</strong>ue) führt <strong>den</strong> Code<br />
bis zur angegebenen Zeile oder bis zum angegebenen Unterprogramm<br />
aus.<br />
Subrout<strong>in</strong>en auflisten S<br />
Das Kommando S [[!] ~pattern] listet alle Unterprogramme<br />
auf, die dem regulären Ausdruck pattern (nicht !)<br />
entsprechen.<br />
Ohne Muster wer<strong>den</strong> alle Subrout<strong>in</strong>en, auch die Unterprogramme,<br />
die von Paketen oder dem <strong>Debugger</strong> selbst gela<strong>den</strong><br />
wer<strong>den</strong>, angezeigt. Diese Liste kann sehr, sehr lang wer<strong>den</strong>.<br />
Daher empfiehlt sich die Angabe e<strong>in</strong>es Pakets<br />
DB S ma<strong>in</strong><br />
ma<strong>in</strong>::BEGIN<br />
ma<strong>in</strong>::display<br />
oder die Verwendung e<strong>in</strong>es Patterns.<br />
DB S display<br />
Term::ReadL<strong>in</strong>e::Gnu::XS::display_readl<strong>in</strong>e_<br />
version<br />
Term::ReadL<strong>in</strong>e::Gnu::XS::shadow_redisplay<br />
ma<strong>in</strong>::display<br />
Hier sieht man sehr schön, das wirklich alle gela<strong>den</strong>en Subrout<strong>in</strong>en<br />
durchsucht wer<strong>den</strong>.<br />
Variablen anzeigen<br />
Das Kommando V zeigt alle Variablen im aktuellen Paket an.<br />
Wie bei <strong>den</strong> Subrout<strong>in</strong>en wer<strong>den</strong> alle gela<strong>den</strong>en Variablen<br />
angezeigt. Diese Liste kann ebenfalls sehr, sehr lang se<strong>in</strong>.<br />
Daher empfiehlt sich auch hier die Verwendung des Paketnamens<br />
<strong>in</strong> Verb<strong>in</strong>dung mit e<strong>in</strong>em Suchbegriff (eq)<br />
DB V Carp Verbose<br />
$Verbose = 0<br />
oder die Verwendung des Paketnamens <strong>in</strong> Verb<strong>in</strong>dung mit<br />
e<strong>in</strong>em regulärem Ausdruck<br />
DB V Carp ~V<br />
$Verbose = 0<br />
$VERSION = 1.04<br />
Mit my deklarierte Variablen wer<strong>den</strong> jedoch mit V nicht angezeigt.<br />
Hierzu kann das Kommando y verwendet wer<strong>den</strong>,<br />
welches das CPAN-Modul PadWalker benötigt.<br />
Ohne Parameter wird der Code von der aktuellen Zeile bis<br />
zum nächsten Breakpo<strong>in</strong>t oder Watch (s.u.) oder bis zum<br />
Ende des Programms ausgeführt.<br />
ma<strong>in</strong>::(example.pl:4): \<br />
foreach my $number (1..2) {<br />
DB c<br />
*** 01 ***<br />
*** 02 ***<br />
Da hier ke<strong>in</strong>e Breaks oder Watches (s.u.) gesetzt wur<strong>den</strong>,<br />
läuft das Programm e<strong>in</strong>fach durch.<br />
Restart R<br />
Sobald das Programm e<strong>in</strong>mal vollständig durchgelaufen ist,<br />
ist e<strong>in</strong> Neustart des Programms im <strong>Debugger</strong> notwendig.<br />
Intern verwendet der <strong>Perl</strong> <strong>Debugger</strong> (perl5db.pl) dazu die<br />
Funktion exec().<br />
Debugged program term<strong>in</strong>ated. Use q to quit<br />
or R to restart,<br />
use o <strong>in</strong>hibit_exit to avoid stopp<strong>in</strong>g after<br />
program term<strong>in</strong>ation,<br />
h q, h R or h o to get additional <strong>in</strong>fo.<br />
DBR<br />
Warn<strong>in</strong>g: some sett<strong>in</strong>gs and command-l<strong>in</strong>e options<br />
may be lost!<br />
...<br />
ma<strong>in</strong>::(example.pl:4): foreach my $number<br />
(1..2) {<br />
Mit ActiveState-<strong>Perl</strong> 5.8.x unter W<strong>in</strong>dows funktioniert das<br />
leider nicht. Hier ist e<strong>in</strong> Neustart des <strong>Debugger</strong>s auf der Kommandozeile<br />
zw<strong>in</strong>gend erforderlich. Dank der History-Funktion<br />
von command.com ist dies ke<strong>in</strong> wirkliches H<strong>in</strong>dernis für<br />
<strong>den</strong> E<strong>in</strong>satz des <strong>Debugger</strong>s.<br />
Step Into<br />
s führt die nächste Programmzeile aus und spr<strong>in</strong>gt dabei <strong>in</strong><br />
die Unterprogramme (Step Into)<br />
Beispiel Step Into<br />
DB s<br />
ma<strong>in</strong>::(example.pl:5):<br />
&display($number);<br />
DB s<br />
ma<strong>in</strong>::display(example.pl:8): \<br />
my $number = shift;<br />
DB s<br />
38