2014-01-09 44 views
0

我正试图调试一个应用程序由于无效内存访问而触发连续数据中止的问题。Android非法内存访问 - 谁处理?以及如何处理?

我有以下疑问。

  1. 通常,当Android(CPU ARM)中的应用程序访问无效的内存访问时,会发生什么情况?

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

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

我想代码(仅如果可能的话)提供一些参考。谢谢。

+0

请检查此链接 http://www.slideshare.net/info_zybotech/memory-management-in-android-14342396 – dipali

回答

2

Android构建于Linux之上。所以你的问题实际上是Linux如何处理那些网上应该有很多指针的问题。

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

的Android还可以创建在/数据/墓碑墓碑和投入Android的日志缓冲区(adb logcat)一些额外的详细信息。

通常,当某个程序在Linux中死亡,Linux没有做什么特别的,但那么你可能有应用程序生命周期管理的一些更高水平,这会做一些额外的步骤。

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

这是不可能找到在代码库做所有的这些,因为它是不同的部分,层之间的逻辑传播的单点。