crash handling

Estaba yo preguntándome esta tarde si sería posible lanzar de forma automática gdb cuando un programa cascara, sin necesidad de ponerse a depurar después, reproducir el bug, etc, al estilo del manejador de errores que instala Visual Studio en Windows que pregunta si se desea depurar la aplicación.

Me ha salido algo como esto (HTML horrible para el coloreado de sintaxis patrocinado por Vim):

#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void attach_gdb(int signum)
{
    pid_t gdbpid;
    pid_t debuggee_pid = getpid();
    int gdb_exit_status;
    char pidbuf[100];
    char exebuf[100]; // should be safe unless PIDs reach ~90 digits ;P
    sprintf(pidbuf, "%d", debuggee_pid);
    sprintf(exebuf, "/proc/%d/exe", debuggee_pid);
    printf("Signal %d received. Attaching GDB to process. PID=%d\n", signum, debuggee_pid);

    if ((gdbpid = fork()) == 0)
    {
        execlp("gdb", "gdb", exebuf, pidbuf, NULL);
        perror("execlp");
        exit(1);
    }

    waitpid(gdbpid, &gdb_exit_status, 0); // hold on, we want to be debugged
    exit(1);
}

void __attribute__((constructor)) setup_handler()
{
    struct sigaction sa, old_sa;
    sa.sa_handler = attach_gdb;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags=0;
    // Register the handler for all actions which dump core by default
    sigaction(SIGSEGV, &sa, &old_sa);
    sigaction(SIGFPE, &sa, &old_sa);
    sigaction(SIGABRT, &sa, &old_sa);
    sigaction(SIGILL, &sa, &old_sa);
    sigaction(SIGQUIT, &sa, &old_sa);
}

Si se compila como librería dinámica y se enlaza a cualquiera de nuestros programas (o se precarga con LD_PRELOAD) lanza un gdb asociado al proceso al recibir cualquiera de las señales que causarían un core dump y terminación del programa :D.

¿Alguna idea para mejorarlo y que sea práctico? ¿Existe ya algo asi en un paquete Debian que hace mil cosas molonas más? (seguro que sí XD).

1 Comment »

  1. plauctuts said,

    August 13, 2018 @ 03:41 am

    casino real money casino blackjack foxwoods online casino foxwoods online casino | https://bestonlinecasinoddesk.com/ – parx online casino https://bestonlinecasinoddesk.com/ – mgm online casino

  2. scurceleNes said,

    August 13, 2018 @ 09:29 am

    online gambling online gambling casino games free online casino slots | https://onlinecasinoplay777.us.org/ – casino play https://onlinecasinoplay777.us.org/ – mgm online casino

  3. ArowlyGlarl said,

    August 14, 2018 @ 03:03 am

    slots for real money online casino sites online casinos free online casino | https://casinorealmoneyigames.com/ – empire city online casino https://casinorealmoneyigames.com/ – free online casino slots

  4. bifflycle said,

    August 14, 2018 @ 03:33 am

    online casino sites zone online casino best online casino online casino sites | https://online-casinos.us.org/ – tropicana online casino https://online-casinos.us.org/ – casino games

  5. ArowlyGlarl said,

    August 14, 2018 @ 04:56 am

    parx online casino casino games casino games play casino | https://casinorealmoneyigames.com/ – parx online casino https://casinorealmoneyigames.com/ – casino games

  6. sodsitaws said,

    August 14, 2018 @ 04:56 am

    casino real money tropicana online casino virgin online casino best online casinos | https://casinorealmoneyiplay24.com/ – play online casino https://casinorealmoneyiplay24.com/ – casino games

  7. IsakovskayaWap said,

    August 15, 2018 @ 06:42 am

    how long for viagra to kick in

    http://buyviagra100mgo.com/ – viagra canada
    canadian viagra

    kamagra viagra te koo

RSS feed for comments on this post · TrackBack URI

Leave a Comment

This blog is protected by Dave\'s Spam Karma 2: 17770 Spams eaten and counting...