为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?

如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?

浮云间 2019-11-06 10:00:58
我正在将一个项目移到新的Android Native Development Kit(即JNI)上,我想抓住SIGSEGV(如果它发生的话(可能还有SIGILL,SIGABRT,SIGFPE)),以便呈现一个不错的崩溃报告对话框,而不是(或之前)当前发生的情况:该进程立即异常死亡,并且操作系统可能会尝试重新启动该进程。(编辑: JVM / Dalvik VM捕获信号并记录堆栈跟踪和其他有用的信息;我只想向用户提供通过电子邮件将信息发送给我的选项。)情况是:我没有编写大量的C代码,完成了该应用程序中的大部分工作(所有游戏逻辑),尽管它在许多其他平台上都经过了良好的测试,但我在Android中完全有可能端口,将其作为垃圾进行处理,并导致本机代码崩溃,因此我希望当前显示在Android日志中的崩溃转储(本机和Java)(我猜这在非Android情况下将是stderr)。我可以随意修改C和Java代码,尽管回调(传入和传出JNI)的数量大约为40,显然,小差异的加分。我听说过J2SE中的信号链库libjsig.so,如果我可以在Android上安全地安装类似的信号处理程序,那将解决我的问题中的棘手部分,但是我没有看到这样的Android / Dalvik库。
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

FWIW,Google Breakpad在Android上运行良好。我做了移植工作,我们将其作为Firefox Mobile的一部分进行了运输。它需要一些设置,因为它不会在客户端提供堆栈跟踪,但会向您发送原始堆栈内存,并在服务器端进行堆栈遍历(因此您不必在应用程序中附带调试符号) )。


查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 1130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信