… | |
… | |
2929 | my ($msg, @addr) = @_; |
2929 | my ($msg, @addr) = @_; |
2930 | |
2930 | |
2931 | async { |
2931 | async { |
2932 | my @bt = fork_call { |
2932 | my @bt = fork_call { |
2933 | @addr = map { sprintf "%x", $_ } @addr; |
2933 | @addr = map { sprintf "%x", $_ } @addr; |
|
|
2934 | my $self = (-f "/proc/$$/exe") ? "/proc/$$/exe" : $^X; |
2934 | open my $fh, "exec addr2line -C -f -i -e \Q$^X\E @addr 2>&1 |" |
2935 | open my $fh, "exec addr2line -C -f -i -e \Q$self\E @addr 2>&1 |" |
2935 | or die "addr2line: $!"; |
2936 | or die "addr2line: $!"; |
2936 | |
2937 | |
2937 | my @funcs; |
2938 | my @funcs; |
2938 | my @res = <$fh>; |
2939 | my @res = <$fh>; |
2939 | chomp for @res; |
2940 | chomp for @res; |