Thread

  1. Launching debugger on self on SIGSEGV

    Gurjeet Singh <singh.gurjeet@gmail.com> — 2011-07-11T16:45:09Z

    Hi,
    
        The attached patch registers a signal handler for SIGSEGV and launches
    GDB in batch mode on its own pid so that the stack leading to the SEGV can
    be dumped in the server logs. Also attached is an example of the stack
    dumped by gdb in server log file (caused by a `kill -segv nnn` on the
    backend).
    
        Since this patch calls fork() inside a signal handler, I investigated a
    bit and found that, per POSIX, fork() is asynch-signal-safe and hence it can
    be called inside a handler.
    
        This in itself might not be very useful because I haven't seen many
    crash reports in the community, but it can be extended to dump stack on
    Assert so that it helps developers and our beta testers. It can also be used
    to dump stack of a process we are about to kill for deadlock reasons, and
    before certain PANIC conditions too.
    
        Right now it works only for gdb (setting the GUC to true actually check
    for the presence of gdb), but it can be made generic, they way our
    archive_command etc. work, so that we take a string and replace certain
    parameters with binary path and pid so that any debugger can be used.
    
        It also looks pretty easy to port it to Windows since all we really want
    to do is create an external process with certain parameters, and
    CreateProcess() is all we need. I haven't investigated seriously about that
    but of there's interest in this patch then I can spend some time on that
    too.
    
    Regards,
    -- 
    Gurjeet Singh
    EnterpriseDB Corporation
    The Enterprise PostgreSQL Company