http://www.perlmonks.org?node_id=640324


in reply to Forcing stack trace?

I frequently use something like this:
use strict; use warnings; use Log::Log4perl qw(:easy); Log::Log4perl->easy_init($WARN); my $log = Log::Log4perl->get_logger('stack'); sub show_call_stack { my ( $path, $line, $subr ); my $max_depth = 30; my $i = 1; if ($log->is_warn()) { $log->warn("--- Begin stack trace ---"); while ( (my @call_details = (caller($i++))) && ($i<$max_depth) ) { $log->warn("$call_details[1] line $call_details[2] in function $ +call_details[3]"); } $log->warn("--- End stack trace ---"); } } sub tze { show_call_stack(); } sub bar { return tze();} sub foo { return bar(); } foo(); __END__ $ perl -w 640319.pl 2007/09/21 12:23:10 --- Begin stack trace --- 2007/09/21 12:23:10 640319.pl line 22 in function main::tze 2007/09/21 12:23:10 640319.pl line 23 in function main::bar 2007/09/21 12:23:10 640319.pl line 25 in function main::foo 2007/09/21 12:23:10 --- End stack trace ---
--
Andreas