Как я могу поймать SIGSEGV (ошибка сегментации) и получить трассировку стека под JNI на Android?

Я двигаюсьпроект в новый комплект разработки для Android (например, JNI), и я хотел бы поймать SIGSEGV, если это произойдет (возможно, также SIGILL, SIGABRT, SIGFPE), чтобы представить приятный диалог отчетности о сбоях вместо (или до) того, что в настоящее время случается: немедленная бесцеремонная смерть процесса и, возможно, попытка ОС перезапустить его. (Edit: JVM / Dalvik VM ловит сигнал и регистрирует трассировку стека и другую полезную информацию; Я просто хочу предложить пользователю возможность отправить эту информацию мне по-настоящему.)

Ситуация такова: большая часть кода на C, которую я не написал, выполняет большую часть работы в этом приложении (всю игровую логику), и, хотя она хорошо протестирована на многих других платформах, вполне возможно, что я в моем порте Android будет загружать мусор и вызывать сбой в нативном коде, поэтому я хочу, чтобы аварийные дампы (как нативные, так и Java) отображались в журнале Android (я думаю, это будет stderr в не Android) ситуация). Я свободен изменять код C и Java произвольно, хотя количество обратных вызовов (входящих и исходящих из JNI) составляет около 40, и, очевидно, бонусные баллы за небольшие различия.

Я слышал о библиотеке цепочки сигналов в J2SE, libjsig.so, и если бы я мог безопасно установить такой обработчик сигналов на Android, это решило бы важную часть моего вопроса, но я не вижу такой библиотеки для Android / Dalvik ,

Ответы на вопрос(4)

Ваш ответ на вопрос