Estoy leyendo el libro "Interfaces e implementaciones C" de David Hanson. Este ejercicio preguntas parece interesante y soy incapaz de encontrar una solución:Invocando el depurador desde un programa C
En algunos sistemas, un programa puede invocar un depurador en sí mismo cuando se ha detectado un error . Esta función es particularmente útil durante el desarrollo , cuando las fallas de aserción pueden ser comunes.
Puede proporcionar un breve ejemplo de cómo invocar un depurador.
void handle_seg_fault(int arg)
{
/* how to invoke debugger from within here */
}
int main()
{
int *ptr = NULL;
signal(SIGSEGV, handle_seg_fault);
/* generate segmentation fault */
*ptr = 1;
}
Hagas lo que hagas, asegúrate de utilizar solo [funciones de seguridad de señal asíncrona] (http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html) desde tu manejador de señal. Por ejemplo, de todas las variantes de 'exec', solo' execve' y 'execle' son seguros de ejecutar en el contexto de un controlador de señal (captura de señal asíncrona). Ahora bien, si en general es prudente hacerlo (frente a una "canción corruptora del estado" como SIGSEGV) es otra cosa. Me gustaría ir con (a) un depurador externo o (b) inspeccionar el post mortem del coredump. –