05.11.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!