我正在将 一个项目移动到新的 Android 原生开发工具包(即 JNI) ,我想捕捉 SIGSEGV,如果它发生(可能还有 SIGILL,SIGABRT,SIGFPE) ,为了呈现一个漂亮的崩溃报告对话框,而不是(或之前)当前发生的情况: 进程立即突然死亡,可能操作系统尝试重新启动它。(编辑: JVM/Dalvik VM 捕获信号并记录堆栈跟踪和其他有用信息; 我只是想提供给用户一个选项,让他们把这些信息通过电子邮件发送给我。)
情况是这样的: 一大堆我没有编写的 C 代码完成了这个应用程序的大部分工作(所有的游戏逻辑) ,尽管它已经在许多其他平台上进行了很好的测试,但是我在 Android 端口中给它添加垃圾代码并导致本机代码崩溃是完全有可能的,所以我希望当前显示在 Android 日志中的崩溃转储(包括本机代码和 Java 代码)(我想在非 Android 情况下应该是 stderr)。我可以自由地任意修改 C 和 Java 代码,尽管回调(进出 JNI 的回调)大约为40,而且很明显,小的差异会得到额外的分数。
我听说过 J2SE 中的信号链接库 libjsig.so,如果我能安全地在 Android 上安装这样的信号处理程序,就可以解决我问题的捕捉部分,但我看不到 Android/Dalvik 有这样的库。