Hmm. Puede configurar un manejador de señal para iniciar el depurador con el proceso actual. De esta forma, puede inspeccionar todo el estado "en vivo".
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
const char *prog=0;
void fn(int signum)
{
char buf[256];
snprintf(buf,255,"ddd %s %d",prog,getpid());
system(buf);
}
int main(int argc, char **argv)
{
prog=argv[0];
signal(SIGSEGV,&fn);
int *p=0;
int k=*p;
}
ACTUALIZACIÓN: Chaged de acuerdo con las sugerencias de miedwar y Fanatic23. Las distribuciones actuales de Ubuntu están configuradas para no permitir la depuración de procesos no secundarios. Ver https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process para una solución.
+1 es bueno saber que puede captar esta señal, por cierto, necesita una salida() después del sistema() por lo que no se ejecutará más de una vez. – miedwar
El prototipo para fn necesita un argumento entero para obtener el código compilado. – Fanatic23