我正在将一个项目移动到新的 Android 本机开发工具包(即 JNI),我想捕获 SIGSEGV,如果它发生(可能还有 SIGILL、SIGABRT、SIGFPE),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:进程立即不客气地死亡,并且操作系统可能尝试重新启动它。(编辑: JVM/Dalvik VM 捕获信号并记录堆栈跟踪和其他有用信息;我只是想为用户提供将这些信息通过电子邮件发送给我的选项。)
情况是:我没有编写的大量 C 代码在这个应用程序中完成了大部分工作(所有游戏逻辑),尽管它在许多其他平台上经过了很好的测试,但我完全有可能在我的 Android 中端口,会给它提供垃圾并导致本机代码崩溃,所以我想要当前显示在 Android 日志中的崩溃转储(本机和 Java)(我猜在非 Android 情况下它会是标准错误)。我可以随意修改 C 和 Java 代码,尽管回调(从 JNI 传入和传出)数量约为 40,显然,小差异的奖励积分。
我听说过 J2SE 中的信号链库 libjsig.so,如果我可以在 Android 上安全地安装这样的信号处理程序,那将解决我的问题的关键部分,但我看不到 Android/Dalvik 的此类库.