En mi aplicación, manejo SIGSEG para generar una traza inversa y llamo al abort()
para generar un volcado del núcleo.¿Cómo encontrar qué hilo causó a SEGFAULT en una sesión post-mortem gdb?
Si ahora ejecuto un análisis gdb-post-mortem del núcleo, el hilo que causó el SEGFAULT ya no es visible. ¿Hay algo que pueda hacer para ver la causa de SEGFAULT?
Saludos cordiales, Martin
¿También está haciendo otro trabajo en el controlador? ¿Por qué no dejar que el sistema operativo use su comportamiento predeterminado para dejar un núcleo para usted? –
Simplemente creando un retraso en stderr y luego llamando a abort(). –
Por favor, especifique su sistema operativo y qué es exactamente lo que observa en GDB. En Linux (y en cualquier otro UNIX que se me ocurra) el controlador SIGSEGV se ejecutará en el hilo que causó SIGSEGV en primer lugar. Si ese manejador llama a abort(), entonces el volcado del núcleo contendrá ese hilo como el hilo # 1, y no habrá problemas para encontrar exactamente qué instrucción y qué pila de llamadas causó el problema. Como tiene dificultades, tiene un sistema operativo "extraño" o no está describiendo correctamente lo que realmente observa. –