Estou movendo um projeto para o novo Android Native Development Kit (ou seja, JNI) e gostaria de capturar o SIGSEGV, caso ocorra (possivelmente também SIGILL, SIGABRT, SIGFPE) para apresentar um bom diálogo de relatório de falha, em vez de (ou antes) o que acontece atualmente: a morte sem cerimônia imediata do processo e possivelmente alguma tentativa do SO de reiniciá-lo. ( Editar: O JVM / Dalvik VM capta o sinal e registra um rastreamento de pilha e outras informações úteis; eu só quero oferecer ao usuário a opção de enviar essas informações para mim, na verdade.)
A situação é: um grande corpo de código C que eu não escrevi faz a maior parte do trabalho neste aplicativo (toda a lógica do jogo) e embora seja bem testado em várias outras plataformas, é inteiramente possível que eu, no meu Android porta, irá alimentá-lo com lixo e causar uma falha no código nativo, então eu quero os despejos de memória (nativos e Java) que atualmente aparecem no log do Android (acho que seria stderr em uma situação não-Android). Estou livre para modificar o código C e Java arbitrariamente, embora os retornos de chamada (tanto entrando como saindo de JNI) totalizem cerca de 40 e, obviamente, pontos de bônus para pequenos diffs.
Já ouvi falar da biblioteca de encadeamento de sinal em J2SE, libjsig.so, e se eu pudesse instalar com segurança um manipulador de sinal como esse no Android, isso resolveria a parte contundente da minha dúvida, mas não vejo essa biblioteca para Android / Dalvik .