--- deliantra/server/lib/cf.pm 2007/04/21 17:46:39 1.259 +++ deliantra/server/lib/cf.pm 2007/04/27 19:53:05 1.260 @@ -2925,6 +2925,33 @@ ); } +sub _log_backtrace { + my ($msg, @addr) = @_; + + async { + my @bt = fork_call { + @addr = map { sprintf "%x", $_ } @addr; + open my $fh, "exec addr2line -C -f -i -e \Q$^X\E @addr 2>&1 |" + or die "addr2line: $!"; + + my @funcs; + my @res = <$fh>; + chomp for @res; + while (@res) { + my ($func, $line) = splice @res, 0, 2, (); + push @funcs, "[$func] $line"; + } + + @funcs + }; + + $msg =~ s/\n//; + + LOG llevInfo, "[ABT] $msg\n"; + LOG llevInfo, "[ABT] $_\n" for @bt; + }; +} + # load additional modules use cf::pod;