note
andreas1234567
I frequently use something like this:
<c>
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 ---
</c>
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-321512">
<small>
--<br>
Andreas
</small>
</div></div>
640319
640319