0

我正在尝试调试由于无效的内存访问而导致应用程序触发连续数据中止的问题。

我有以下疑问。

  1. 一般来说,当Android(CPU ARM)中的应用程序正在访问无效的内存访问时,会发生什么?

    我猜会发生页面错误,然后会触发数据中止。是这样吗?有人可以简要解释一下 Android 如何处理无效的内存访问吗?

  2. 进行非法内存访问的进程会发生什么?它是一次又一次地重新启动还是被杀死?谁来处理这个?

我想要一些对代码的引用(仅在可能的情况下)。谢谢你。

4

1 回答 1

2

Android 建立在 Linux 之上。因此,您的问题实际上是 Linux 如何处理那些在网络上应该有大量指针的问题。

通常,当应用程序进行非法内存访问时,即内存地址未映射到您的应用程序时,Linux 将向应用程序发送一个 SIGSEGV 信号,如果未处理,则会将其杀死,同时在内核日志 ( dmesg, /proc/kmsg) 中生成一些有用的日志。

Android 也可能在 /data/tombstone 下创建墓碑,并将一些额外的详细信息放入 android 日志缓冲区 ( adb logcat)。

通常,当一个进程在 Linux 中死掉时,Linux 不会对此做任何特别的事情,但是您可能会有一些更高级别的应用程序生命周期管理来执行一些额外的步骤。

Android只是为普通应用程序创建一个~“意外的应用程序崩溃”对话框,但对于需要保持活动的服务或应用程序(如主屏幕),它会用一些逻辑重新启动它们,以避免错误服务的持续重生。

不可能在代码库中找到执行所有这些操作的单点,因为它是逻辑分布在不同部分、层之间的。

于 2014-01-09T07:26:59.760 回答