Trace
Jörg
- perl
Hallo,
gibt es für Perl eine (Freeware-)Testhilfe, wie den trace (Anzeige aller durchlaufener Statements)?
Gruß
Jörg
gibt es für Perl eine (Freeware-)Testhilfe, wie den trace (Anzeige aller durchlaufener Statements)?
Zur Unterstützung bei der Entwicklung von Perlscripten gibt es die Modulgruppe Devel::. Ansonsten beschreibe mal genauer, um was es dir geht.
Siechfred
Hallo!
Es passiert immer wieder, dass ich (man) nicht weiß, welche Programmzweige das Programm durchläuft.
Es gibt nun die mühsame Möglichkeit an zig Stellen im Programm einen
print durchzuführen. Dies können allerdings sehr viele sein - und die muss man dann alle wieder entfernen. Zu diesem Zweck gibt es an den Großrechnern den trace, der "beliebig" fein eingestellt werden kann.
Es passiert immer wieder, dass ich (man) nicht weiß, welche Programmzweige das Programm durchläuft. Es gibt nun die mühsame Möglichkeit an zig Stellen im Programm einen print durchzuführen. Dies können allerdings sehr viele sein - und die muss man dann alle wieder entfernen. Zu diesem Zweck gibt es an den Großrechnern den trace, der "beliebig" fein eingestellt werden kann.
Hast du dich mal durch die Devel-Module geklickt? Da gibt es Devel::Backtrace, Devel::CallTrace (mit Hinweisen auf weitere Module, die ähnliches tun, z.B. Debug::Trace) und natürlich diverse manpages in Perl selber, als Einstieg perldebtut.
Siechfred
Hi,
Hast du dich mal durch die Devel-Module geklickt?
Hab ich. Das ist ja eine mittlere Katastrophe, was man da lesen muss, um vielleicht irgendwann einen trace aufsetzen zu können. In der Beziehung lobe ich mir den Großrechner!
Vielleicht hat mir jemand ein kleines Beispiel?
als Einstieg perldebtut.
der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.
Gruß Jörg
Hast du dich mal durch die Devel-Module geklickt?
Hab ich. Das ist ja eine mittlere Katastrophe, was man da lesen muss, um vielleicht irgendwann einen trace aufsetzen zu können. In der Beziehung lobe ich mir den Großrechner!
Naja, ohne ein bisschen zu lesen wirst du auch diesen trace nicht auf den Großrechner aufgesetzt haben. Die Frage ist hier aber von welcher Programmiersprache du sprichst? Da es grosse Unterschiede zwischen Skriptsprachen kompilierte Sprachen gibt.
Vielleicht hat mir jemand ein kleines Beispiel?
als Einstieg perldebtut.
der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.
CGI Programme zu debuggen ist so oder so nicht einfach, da gibt es sicher viele Wege. Ich benutze eine globale Funktion, die im Debugmodus mir Werte ausgibt und ansonsten nichts tut.
Es gibt auch eine IDE mit der du auch CGI Perlprogramme debuggen kannst: komodo die ist aber nicht kostenlos.
Struppi.
Naja, ohne ein bisschen zu lesen wirst du auch diesen trace nicht auf den Großrechner aufgesetzt haben.
In Cobol genügte als einfachste Variante: ready trace bzw. reset trace
damit hast Du fast alles erschlagen.
Der Debugger DEVEL in Perl setzt allerdings sehr viele Kenntnisse in Perl voraus. Wenn ich die einmal habe, brauche ich wahrscheinlich den Debugger nicht mehr.
Gruß
Jörg
Hallo Jörg!
Der Debugger DEVEL in Perl setzt allerdings sehr viele Kenntnisse in Perl voraus. Wenn ich die einmal habe, brauche ich wahrscheinlich den Debugger nicht mehr.
;)
Weswegen in vielen Fälle der (wohlgemerkt: alleinige) Hinweis auf Manpages einem OP selten hilft. Es sollte deswegen versucht werden, zu erklären - und ergänzend ruhig auf die Manpages verweisen.
Viele Grüße aus Frankfurt/Main,
Patrick
Vielleicht hat mir jemand ein kleines Beispiel?
Aber klar, so schlimm ist das gar nicht. Mal ein ziemlich sinnloses Beispiel:
use strict;
use diagnostics;
use Data::Dumper;
# Beim Einbinden des Debuggers musst du die zu ueberwachenden
# Funktionen angeben, in meinem Fall flip, s.a. package Nonsense
use Debug::Trace qw/flip/;
my @liste = qw(a 241 50 w e);
my @uppercase = map { flip($_) } @liste;
print Dumper @uppercase;
sub flip {
return ($_[0] =~ /^[a-z]+$/ ? Nonsense::numify(shift) : Nonsense::stringify(shift));
}
package Nonsense;
use Debug::Trace qw/numify stringify/;
sub numify {
return ord shift;
}
sub stringify {
return chr shift;
}
1;
Ausgabe:
TRACE: main::flip("a") called at mini.pl line 11 package main
TRACE: Nonsense::numify("a") called at mini.pl line 15 sub main::flip
TRACE: Nonsense::numify() returned: (97)
TRACE: main::flip() returned: (97)
TRACE: main::flip(241) called at mini.pl line 11 package main
TRACE: Nonsense::stringify(241) called at mini.pl line 15 sub main::flip
TRACE: Nonsense::stringify() returned: ("\361")
TRACE: main::flip() returned: ("\361")
TRACE: main::flip(50) called at mini.pl line 11 package main
TRACE: Nonsense::stringify(50) called at mini.pl line 15 sub main::flip
TRACE: Nonsense::stringify() returned: (2)
TRACE: main::flip() returned: (2)
TRACE: main::flip("w") called at mini.pl line 11 package main
TRACE: Nonsense::numify("w") called at mini.pl line 15 sub main::flip
TRACE: Nonsense::numify() returned: (119)
TRACE: main::flip() returned: (119)
TRACE: main::flip("e") called at mini.pl line 11 package main
TRACE: Nonsense::numify("e") called at mini.pl line 15 sub main::flip
TRACE: Nonsense::numify() returned: (101)
TRACE: main::flip() returned: (101)
der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.
Aber Debug::Trace funktioniert auch im CGI-Kontext, die Trace-Ausgaben werden dort ins Error-Log geschrieben.
Siechfred
Hallo,
das hat mir jetzt viel geholfen, danke!
Gruß
Jörg