0

我在 i.MX51 板上运行自定义 android 并观察到一个应用程序的奇怪问题。

我在 n logcat 中记录了应用程序的分段错误(本机,使用 NDK 编写):

03-19 15:26:46.763 I/DEBUG   ( 2234): pid: 2257, tid: 2257  >>> /usr/bin/powerMgr <<<
03-19 15:26:46.763 I/DEBUG   ( 2234): signal 8 (SIGFPE), code 0 (?), fault addr 000008d1

即使在此之后,应用程序继续使用我从 logcat 和 ps 命令确认的相同 PID (2257) 运行。这可能吗 ?如果是,如何?

4

1 回答 1

1

这不是分段错误(SIGSEGV,信号 11)。你得到一个SIGFPE信号 8,可能是整数除以零的结果。信号处理并没有杀死进程,所以它只是继续执行。

许多 ARM CPU 缺少硬件除法指令,因此SIGFPE从软件除法函数中明确抛出。结果,您在“故障地址”中没有得到有意义的值。

随着时间的推移,这种情况的处理方式发生了变化;较新版本的Android对此要好一些。

于 2014-03-26T16:53:41.750 回答