den Aufruf einers Programms/Lib zurückverfolgen
roger
- perl
Hallo,
ich habe immer wieder einmal das Problem das ein Programm oder eine Funktion in einer Lib eine Fehler ausgibt, möchte aber wissen von woher diese Function aufgerufen wird.
z.B.
otto.pl -> function.hans(lib franz) -> function.karl(lib sepp)
In der "function.karl(lib sepp)" gibt es z.B einen falschen Übergabewert.
Kann ich das irgendwie nachvollziehen .... so nach dem Motto
Fehlerausgabe -> "Fehler in Funktion function.karl(lib sepp) beim Aufruf durch otto.pl"
Gibt es in Perl eine Möglichkeit den kompletten Aufruf Stack abzufragen ??
frohes Fest
roger
hi,
Gibt es in Perl eine Möglichkeit den kompletten Aufruf Stack abzufragen ??
Ja, guck Dir mal die Funktion caller() an.
Hotti
Hallo,
Carp::Always darf ich nur benutzen wenn ich nicht z.B. "die" benutze....hab ich gelesen :-)
Hier mal mein Beispiel.
if ($var == x.y)
{
logeintrag "Varname, Zeile, kompletter Aufrufstack(komme von x->y-Z),
Programmname-> Fehler x.y"
}
Ich denke (my $Package, my $Datei, my $Zeile) = caller(); wäre da vielleicht
die bessere Wahl.
Bei Cpan gibt es eine "Perl6::Caller;"
my $sub = caller->subroutine;
my $line_number = caller->line;
my $is_require = caller(3)->is_require;
Hat hier jemand Erfahrung. Suche eine gute Lösung für die Zukunft.
Gruß
roger
Carp::Always ist ab sofort dein bester Freund. Wenn das Modul geladen ist, hängt es sich in vorhandene Warnungen und Fehler hinein und macht daraus das Gegenstück mit Stacktraces. Es gibt auch eine Variante mit farbiger Ausgabe:
perl -MCarp::Always::Color otto.pl
Wenn du selber Stacktraces in dein Programm einbauen möchtest, verwende Carp.
use Carp qw(cluck confess);
cluck 'Eine Warnung mit Stacktrace';
confess 'Ein Fehler mit Stacktrace';