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; }
In reply to Capturing stack trace in eval by brycen
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |