Debuggen von @INC
am 17.09.2007 11:58:35 von Ferry Bolhar
Hallo,
ich habe ein Modul, das in einem BEGIN-Block eine Codereferenz
an den Beginn von @INC legt:
BEGIN {
unshift @INC, \&set_inc;
}
Nun wird set_inc() jedesmal aufgerufen, wenn Perl in der Folge
Modulcode mit 'use' oder 'require' lädt, wobei der Funktion als
erstes Argument eine Codereferenz von sich selbst und als zweites
Argument der Name der zu ladenden Moduldatei übergeben wird.
So weit, so gut.
Unglücklicherweise funktioniert innerhalb von set_inc() etwas
nicht wie erwartet, und ich würde die Funktion gerne debuggen.
Nur - wie? Wenn ich das Skript mit -d starte, sind alle mit "use"
eingebundenen Module längst geladen und set_inc() ist fertig. Wie
kann ich eine solche Funktion debuggen?
Danke und LG,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Debuggen von @INC
am 17.09.2007 12:00:58 von Moritz Lenz
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig3C0E2DCD0E8E0D48F812703F
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Hallo,
Ferry Bolhar wrote:
> Unglücklicherweise funktioniert innerhalb von set_inc() etwas
> nicht wie erwartet, und ich würde die Funktion gerne debuggen.
> Nur - wie? Wenn ich das Skript mit -d starte, sind alle mit "use"
> eingebundenen Module längst geladen und set_inc() ist fertig. Wie
> kann ich eine solche Funktion debuggen?
mit print, warn und Data::Dumper.
HTH,
Moritz
--=20
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/
--------------enig3C0E2DCD0E8E0D48F812703F
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFG7lBdAAkekJBI0yIRAmkgAKC2IXg8dytjPzNTRXnMNn5WC964rgCf QLKY
cgCVJq+VbRfSScS6Xb39B7Q=
=Uf+Z
-----END PGP SIGNATURE-----
--------------enig3C0E2DCD0E8E0D48F812703F--
Re: Debuggen von @INC
am 17.09.2007 15:35:15 von Ferry Bolhar
Moritz Lenz:
>> Unglücklicherweise funktioniert innerhalb von set_inc() etwas
>> nicht wie erwartet, und ich würde die Funktion gerne debuggen.
>> Nur - wie? Wenn ich das Skript mit -d starte, sind alle mit "use"
>> eingebundenen Module längst geladen und set_inc() ist fertig. Wie
>> kann ich eine solche Funktion debuggen?
> mit print, warn und Data::Dumper.
Naja, soweit war ich auch schon - ist aber ziemlich umständlich.
Den Perl-Debugger dazu zu bringen, auch diese Code zu debuggen,
ist nicht möglich?
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Debuggen von @INC
am 17.09.2007 15:51:48 von Christian Winter
Ferry Bolhar schrieb:
> Hallo,
>
> ich habe ein Modul, das in einem BEGIN-Block eine Codereferenz
> an den Beginn von @INC legt:
>
> BEGIN {
> unshift @INC, \&set_inc;
> }
>
> Nun wird set_inc() jedesmal aufgerufen, wenn Perl in der Folge
> Modulcode mit 'use' oder 'require' lädt, wobei der Funktion als
> erstes Argument eine Codereferenz von sich selbst und als zweites
> Argument der Name der zu ladenden Moduldatei übergeben wird.
> So weit, so gut.
>
> Unglücklicherweise funktioniert innerhalb von set_inc() etwas
> nicht wie erwartet, und ich würde die Funktion gerne debuggen.
> Nur - wie? Wenn ich das Skript mit -d starte, sind alle mit "use"
> eingebundenen Module längst geladen und set_inc() ist fertig. Wie
> kann ich eine solche Funktion debuggen?
perl -d -e 'do "meinscript.pl"'?
-Christian
Re: Debuggen von @INC
am 17.09.2007 16:19:47 von Frank Seitz
Ferry Bolhar wrote:
> Den Perl-Debugger dazu zu bringen, auch diese Code zu debuggen,
> ist nicht möglich?
Du kannst Compile-Time Code wohl tracen, aber keine Breakpoints setzen
(siehe perl perldebug, Abschnitt "Debugging compile-time statements").
Debugge die Funktion einfach mit einem require- statt einem use-Aufruf,
dann solltest Du keine Beschränkungen haben.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Debuggen von @INC
am 18.09.2007 10:31:35 von Ferry Bolhar
Christian Winter:
>> Wie kann ich eine solche Funktion debuggen?
>
> perl -d -e 'do "meinscript.pl"'?
Das funktioniert leider nicht.
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Debuggen von @INC
am 18.09.2007 10:31:58 von Ferry Bolhar
Frank Seitz:
> Debugge die Funktion einfach mit einem require- statt einem use-Aufruf,
> dann solltest Du keine Beschränkungen haben.
Danke, Frank! Man muss:
1) Am Beginn
BEGIN {
$DB::single = 1;
}
schreiben.
2) Eine Breakpoint auf die Funktion, die man beim "unshift @INC"
angegeben hat, setzen (daher muss diese benannt sein, man darf
also nicht
unshift @INC, sub {....};
schreiben.
3) Wie du vorgeschlagen hast, statt "use" "require" verwenden.
Dann hält der Debugger bei der Ausführung des "require" am
Beginn der Funktion an. Etwas Umständlich, aber so geht's.
Danke nochmals!
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at