¿Cómo puedo detectar SIGSEGV (falla de segmentación) y obtener un seguimiento de pila bajo JNI en Android?

estoy moviéndomeun proyecto al nuevo Kit de desarrollo nativo de Android (es decir, JNI) y me gustaría capturar SIGSEGV, en caso de que ocurra (posiblemente también SIGILL, SIGABRT, SIGFPE) para presentar un diálogo de informe de bloqueo agradable, en lugar de (o antes) lo que actualmente sucede: la muerte inmediata y sin ceremonias del proceso y posiblemente algún intento por parte del sistema operativo para reiniciarlo. (Editar: La máquina virtual JVM / Dalvik captura la señal y registra un seguimiento de la pila y otra información útil; Solo quiero ofrecerle al usuario la opción de enviarme esa información realmente.)

La situación es: un gran cuerpo de código C que no escribí hace la mayor parte del trabajo en esta aplicación (toda la lógica del juego) y, aunque está bien probado en muchas otras plataformas, es totalmente posible que yo, en mi Android puerto, lo alimentará a la basura y causará un bloqueo en el código nativo, por lo que quiero los volcados de bloqueo (tanto nativos como Java) que actualmente aparecen en el registro de Android (supongo que sería stderr en una situación que no sea de Android). Soy libre de modificar el código C y Java de forma arbitraria, aunque las devoluciones de llamada (que entran y salen de JNI) suman alrededor de 40 y, obviamente, puntos de bonificación para pequeñas diferencias.

He oído hablar de la biblioteca de encadenamiento de señales en J2SE, libjsig.so, y si pudiera instalar de forma segura un controlador de señales como el de Android, eso resolvería la parte de captura de mi pregunta, pero no veo tal biblioteca para Android / Dalvik .

Respuestas a la pregunta(4)

Su respuesta a la pregunta