您现在的位置:首页 > 博客 > Android开发 > 正文
android ndk抛出 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0088d410的异常分析
http://www.drovik.com/      2013-3-19 16:02:42      来源:www.drovik.com      点击:
android开发中,为了提高程序运行的效率,经常会将复杂的数据运算放在native层运行。所以也会经常碰到如下的错误信息:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0088d410
04-02 13:24:50.701: I/DEBUG(3412):  r0 4b89de00  r1 0088d410  r2 00000000  r3 00000000
04-02 13:24:50.701: I/DEBUG(3412):  r4 00000000  r5 00000000  r6 00000020  r7 00000001
04-02 13:24:50.701: I/DEBUG(3412):  r8 45a98b68  r9 458dbde0  10 0034f598  fp 440b0000
04-02 13:24:50.701: I/DEBUG(3412):  ip 806091c8  sp 45a989d0  lr 80602a0c  pc afd0d200  cpsr 60000010
d0  42a0000000000000  d1  0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d2  0000000042200000  d3  4220000042a00000
04-02 13:24:50.701: I/DEBUG(3412):  d4  000000003df5c2a0  d5  0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d6  0000000000000101  d7  0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d8  3f8000003f800000  d9  8000000080000000
04-02 13:24:50.701: I/DEBUG(3412):  d10 8000000080000000  d11 3ff0000080000000
04-02 13:24:50.701: I/DEBUG(3412):  d12 3f8000003f800000  d13 0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d14 0000000000000000  d15 0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d16 000172c000000000  d17 7e37e43c8800759c
04-02 13:24:50.701: I/DEBUG(3412):  d18 3fff8def8808b024  d19 465aa3f469f40e1c
04-02 13:24:50.701: I/DEBUG(3412):  d20 4008000000000000  d21 3fd99a27ad32ddf5
04-02 13:24:50.701: I/DEBUG(3412):  d22 3fd24998d6307188  d23 3fcc7288e957b53b
04-02 13:24:50.701: I/DEBUG(3412):  d24 3fc74721cad6b0ed  d25 3fc39a09d078c69f
04-02 13:24:50.701: I/DEBUG(3412):  d26 0000000000000000  d27 0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d28 0000000000000000  d29 0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  d30 0000000000000000  d31 0000000000000000
04-02 13:24:50.701: I/DEBUG(3412):  scr 60000012
04-02 13:24:50.741: I/DEBUG(3412):          #00  pc 0000d200  /system/lib/libc.so
04-02 13:24:50.741: I/DEBUG(3412):          #01  pc 00002a08  /system/lib/libgsl.so

如果是初次遇到此种错误的话,自然会有种茫然不知所措的感觉啊。
对以上一坨堆栈信息来说说,我们只看signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0088d410一句就可以了。
Zygote抛出信号11,那就是说某个进程访问了被禁止访问的内存区域,可以通过DDMS查看一下到底在哪里内存访问越界了。

如果您正在使用opengl的话,记得opengl工作在independient线程,因此为了避免使用opengl出现这类问题就需要在构造函数。
分享到:
发表评论(0)
姓名 *
评论内容 *
验证码 *图片看不清?点击重新得到验证码