Java-приложение для Android сбои с SIGSEGV
Мой Android-приложение иногда вылетает без каких-либо сообщений об ошибках. Приложение просто закрывается, и устройство возвращается на домашний экран.
Обычно было бы какое-то сообщение об ошибке, что приложение падало, но ничего не показывалось. Logcat показывает, что произошло какое-то нарушение сегментации, вызвавшее сбой, но так как приложение состоит только из Java-кода и без нативного кода, мне действительно любопытно, почему происходит сбой приложения. Кто-нибудь может дать мне подсказку?
Вот что показывает logcat при сбое приложения:
D/dalvikvm(23912): GC freed 3923 objects / 230968 bytes in 94ms
I/DEBUG (18110): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG (18110): Build fingerprint: 'MOTO_O2DE/umts_sholes/umts_sholes/sholes:2.1-update1/SHOLS_U2_02.36.0/6899264:user/rel-keys'
I/DEBUG (18110): pid: 23912, tid: 23913 >>> com.example.test <<<
I/DEBUG (18110): signal 11 (SIGSEGV), fault addr 0000000c
I/DEBUG (18110): r0 00140120 r1 00000048 r2 00000000 r3 00140168
I/DEBUG (18110): r4 afe3ae08 r5 00000006 r6 00140158 r7 0000a000
I/DEBUG (18110): r8 100ffcf8 r9 4185eef8 10 4185eee0 fp 001243b0
I/DEBUG (18110): ip 00000000 sp 100ffc50 lr afe0f130 pc afe0aeec cpsr 80000070
I/DEBUG (18110): #00 pc 0000aeec /system/lib/libc.so
I/DEBUG (18110): #01 pc 000008e6 /system/lib/libstdc++.so
I/DEBUG (18110): #02 pc 00014124 /system/lib/libutils.so
I/DEBUG (18110): #03 pc 0001423c /system/lib/libutils.so
I/DEBUG (18110): #04 pc 0001af28 /system/lib/libbinder.so
I/DEBUG (18110): #05 pc 0001ba20 /system/lib/libbinder.so
I/DEBUG (18110): #06 pc 0001bcd6 /system/lib/libbinder.so
I/DEBUG (18110): #07 pc 00014236 /system/lib/libutils.so
I/DEBUG (18110): #08 pc 000293a6 /system/lib/libandroid_runtime.so
I/DEBUG (18110): #09 pc 000313ca /system/lib/libandroid_runtime.so
I/DEBUG (18110): #10 pc 0000ecb4 /system/lib/libdvm.so
I/DEBUG (18110): #11 pc 00038838 /system/lib/libdvm.so
I/DEBUG (18110): #12 pc 000139b8 /system/lib/libdvm.so
I/DEBUG (18110): #13 pc 00019338 /system/lib/libdvm.so
I/DEBUG (18110): #14 pc 00018804 /system/lib/libdvm.so
I/DEBUG (18110): #15 pc 0004eed0 /system/lib/libdvm.so
I/DEBUG (18110): #16 pc 0004eef8 /system/lib/libdvm.so
I/DEBUG (18110): #17 pc 00044ada /system/lib/libdvm.so
I/DEBUG (18110): #18 pc 00044b66 /system/lib/libdvm.so
I/DEBUG (18110): #19 pc 00044ff0 /system/lib/libdvm.so
I/DEBUG (18110): #20 pc 000425f4 /system/lib/libdvm.so
I/DEBUG (18110): #21 pc 0000fd94 /system/lib/libc.so
I/DEBUG (18110): #22 pc 0000f860 /system/lib/libc.so
I/DEBUG (18110):
I/DEBUG (18110): code around pc:
I/DEBUG (18110): afe0aedc 809bf000 2d1f08d5 f8d0d829 68c2c008
I/DEBUG (18110): afe0aeec 600cf8dc f0404286 6890822e f04042b0
I/DEBUG (18110): afe0aefc 4594822a d1079e02 fa122201 59a2f505
I/DEBUG (18110):
I/DEBUG (18110): code around lr:
I/DEBUG (18110): afe0f120 e1a00005 e3a01001 e1a02004 ebfffa00
I/DEBUG (18110): afe0f130 e3500000 1a000001 ea000008 ebfffa0a
I/DEBUG (18110): afe0f140 e1a01004 e3a00002 ebfffa05 e3a02000
I/DEBUG (18110):
I/DEBUG (18110): stack:
I/DEBUG (18110): 100ffc10 afe3db94
I/DEBUG (18110): 100ffc14 afe0f130 /system/lib/libc.so
I/DEBUG (18110): 100ffc18 00000000
I/DEBUG (18110): 100ffc1c afe0f048 /system/lib/libc.so
I/DEBUG (18110): 100ffc20 afe3d9dc
I/DEBUG (18110): 100ffc24 998bffec
I/DEBUG (18110): 100ffc28 afe3db94
I/DEBUG (18110): 100ffc2c afe0f130 /system/lib/libc.so
I/DEBUG (18110): 100ffc30 afe3ae08 /system/lib/libc.so
I/DEBUG (18110): 100ffc34 003f194c [heap]
I/DEBUG (18110): 100ffc38 00140158 [heap]
I/DEBUG (18110): 100ffc3c 00005f38
I/DEBUG (18110): 100ffc40 100ffcf8
I/DEBUG (18110): 100ffc44 4185eef8
I/DEBUG (18110): 100ffc48 df002777
I/DEBUG (18110): 100ffc4c e3a070ad
I/DEBUG (18110): #00 100ffc50 a9da9208 /system/lib/libbinder.so
I/DEBUG (18110): 100ffc54 00100000 [heap]
I/DEBUG (18110): 100ffc58 00002bd4
I/DEBUG (18110): 100ffc5c afd008e9 /system/lib/libstdc++.so
I/DEBUG (18110): 100ffc60 003ee870 [heap]
I/DEBUG (18110): 100ffc64 00140158 [heap]
I/DEBUG (18110): 100ffc68 003f194c [heap]
I/DEBUG (18110): 100ffc6c 003f194c [heap]
I/DEBUG (18110): 100ffc70 00005f38
I/DEBUG (18110): 100ffc74 afd008e9 /system/lib/libstdc++.so
I/DEBUG (18110): #01 100ffc78 00140158 [heap]
I/DEBUG (18110): 100ffc7c a9d14127 /system/lib/libutils.so
I/ActivityManager( 1283): Process com.example.test (pid 23912) has died.
I/WindowManager( 1283): WIN DEATH: Window{44fcf318 com.example.test/com.example.test.Main paused=false}
D/Zygote ( 1054): Process 23912 terminated by signal (11)
D/dalvikvm( 1614): GC freed 1856 objects / 84128 bytes in 78ms
Android-версия устройства 2.1 обновление 1
2 ответа
SIGSEGV
указывает на ошибку прошивки. Не должно быть способа вызвать один из них из приложения Android SDK.
Дамп ошибок показывает, что вы тестируете это на устройстве Motorola, возможно, DROID. Если у вас есть доступ к другому устройству, попробуйте там свое приложение и посмотрите, есть ли у вас такие же сбои.
Если вы сталкиваетесь с этими сбоями только на каком-то модифицированном ПЗУ, вам следует обратиться к производителю ПЗУ и указать на этот вопрос, желательно с инструкциями по воспроизведению этого сбоя.
Если у вас происходит сбой на нескольких устройствах, на каждом из которых установлена стоковая прошивка, то это будет ошибка прошивки Android. Опубликуйте весь дамп ошибок, который вы имеете ниже, плюс шаги по воспроизведению сбоя, на http://b.android.com/.
Если у вас есть сбои только на этом устройстве Motorola, то весь дамп ошибок, который у вас есть ниже, плюс шаги по воспроизведению сбоя на соответствующую плату поддержки MOTODEV.
Эти внезапные сбои происходят в любом другом приложении?
Можете ли вы описать общую природу вашего приложения, что оно делает, какие разрешения и библиотеки оно использует? Случайный характер заставляет меня подозревать, что аппаратное обеспечение иногда выходит из строя из-за жары или других аномальных условий.