The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

GDB::bt - Get perl backtraces from coredump files

SYNOPSIS

    $ gdb-bt.pl core.17373
    Reading symbols from perl...
    [New LWP 17373]
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    Core was generated by `rpc                                    '.
    Program terminated with signal SIGABRT, Aborted.
    #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
        50../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    Perl version =  32 ' '
    [0] 0x5597599303b2 "lib/Panda/XServer/RPC/Async/WClientImpl.pm":119
    [1] 0x5597599303b2 "lib/Panda/XServer/RPC/Async/WClientImpl.pm":63
    [2] 0x559757a89492 "lib/Panda/XServer/RPC/WClientImpl.pm":162
    [3] 0x559757a89492 "lib/Panda/XServer/RPC/WClientImpl.pm":106
    [4] 0x5597560d1e12 "t/03-xserver/01-rpc-async.t":35
    [5] 0x5597575113f2 "lib/Panda/Timer.pm":48
    [6] 0x559756ca0c42 "/home/b/development/crazy-panda/core-dev/t/lib/Panda/TestEnvironment.pm":192
    [7] 0x559756ca0c42 "/home/b/development/crazy-panda/core-dev/t/lib/Panda/TestEnvironment.pm":192
    [8] 0x5597560d1e12 "t/03-xserver/01-rpc-async.t":56

DESCRIPTION

If your perl program segfaults you can easily extract C backtraces, however perl bactraces are not available. Usually you can guess correctly them (e.g. from logs), but that takes time and it is error-prone. The proposed script solves at least partially solves the problem.

The script target audience is: XS-modules writers and bug-reporters (for perl core and XS-modules).

LIMITATIONS

Currently it was tested on the following configurations:

5.30 (non threaded, linux)
5.32 (non-threaded, linux)

If it works on your perl and it is not listed here, please, let us know.

INTERNALS

The main script is written in Python, as gdb out of the box has official Python-bindings. To extend it, you should look a the perl sources somewhere around pp_ctl.c / caller_cx and duplicate the code in the Python script. Yes, you have to expand all perl macroses, undocumented perl internals etc., to let it work. There is no other way.

AUTHOR

Ivan Baidakou <dmol@cpan.org>, Crazy Panda LTD

LICENSE

You may distribute this code under the same terms as Perl itself.