brycen has asked for the wisdom of the Perl Monks concerning the following question:
I have some complicated code that is getting an exception deep inside an eval (specifically "Can't use an undefined value as a symbol reference"). This happens about 1 in every 100,000 transactions, from one of several dozen possible code paths. Without a stack trace I'm pretty stuck.
Is there a way to get caller() information through eval, at the eval level? I know (example below) how to print it locally from a method. But if I don't know in advance where the problem will come from, can I get a stack trace later, bubbled up to the eval?
Note that Carp, I think, won't work, since the exception is caused by a perl error, not an explicit die/carp/cluck.
Other monks postings on similar topics include http://www.perlmonks.org/?node_id=226358 and http://www.perlmonks.org/?node_id=211954eval { level2(); }; if($@) { print "Error $@"; #want to print stack trace HERE! } sub level2 { print "This is level2\n"; level3(); } sub level3 { print "This is level3\n"; $i = 0; while(($package, $filename, $line, $subroutine)=caller($i++)) +{ print "caller($i)=$package, $filename, $line, $subrout +ine\n"; } $zero = 0; $zero = 100 / $zero; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Capturing stack trace in eval
by moritz (Cardinal) on Oct 07, 2009 at 19:29 UTC | |
Re: Capturing stack trace in eval
by Joost (Canon) on Oct 07, 2009 at 19:32 UTC | |
by ikegami (Patriarch) on Oct 07, 2009 at 20:26 UTC | |
by Joost (Canon) on Oct 07, 2009 at 21:31 UTC | |
by moritz (Cardinal) on Oct 07, 2009 at 20:00 UTC | |
by Joost (Canon) on Oct 07, 2009 at 20:22 UTC |