Señal 11 (SIGSEGV), código 1 (SEGV_MAPERR)

Estoy creando un juego 2D en Android usando OpenGL. Actualmente estoy probando y depurando el juego en varios dispositivos. El problema que estoy enfrentando, es el terrible "señal 11" de error.

Cuando estoy jugando en mi Samsung Galaxy Nexus, todo funciona bien, y puedo jugar durante horas sin el juego de lanzar ningún error. Mi Nexus está ejecutando Android ICS.

Ahora, cuando lo ejecuto en otros dispositivos, estoy recibiendo este error de señal 11. Estos son los dispositivos que lanzan el error: – HTC Desire HD (pan de jengibre) – HTC Desire Z (pan de jengibre) – HTC Wildfire (pan de jengibre) – Advent Vega tableta (Vegacomb) – Asus EE Pad transformador (helado Sandwich)

No puedo usar la depuración de USB en mi Advent Vega, pero los otros 3 dispositivos que generan el error son depurables. Parece que necesito root mi dispositivo para obtener más información sobre el error de la señal 11. Fui capaz de enraizar mi Galaxy Nexus y mi Desire HD.

Como el error siempre parece aparecer en el mismo momento (cuando el juego acaba de terminar de cargar las texturas), supongo que podría hacer con un solo dispositivo de raíz para averiguar cuál es la causa del problema, luego lo arreglan y prueba La nueva versión en el otro dispositivo.

Primero pensé que tenía algo que ver con la gestión de memoria (no liberar mis objetos, por lo tanto, realizar un montón de solicitudes de GC). Así que después de unas pocas horas de perfiles, optimización, pruebas, etc, me di cuenta de que este no era el problema. Entonces asumí que tenía algo que ver con Thread Safety (un hilo tratando de obtener algo de memoria, donde otro hilo acaba de destruir la referencia). Pero esto tampoco parece ser el caso.

Ok, así que ahora tengo mi deseo de raíz Desired HD conectado a mi computadora portátil, y tengo mi proyecto Eclipse abierto, y DDMS en ejecución.

Ahora, ¿qué me dice logcat cuando el juego / aplicación se bloquea?

04-02 13:24:50.561: D/dalvikvm(3526): GC_CONCURRENT freed 739K, 43% free 4225K/7303K, external 1478K/1939K, paused 2ms+4ms 04-02 13:24:50.661: D/dalvikvm(3526): GC_FOR_MALLOC freed 99K, 43% free 4261K/7431K, external 1466K/1939K, paused 29ms 04-02 13:24:50.701: I/DEBUG(3412): debuggerd: 2012-04-02 13:24:50 04-02 13:24:50.701: I/DEBUG(3412): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 04-02 13:24:50.701: I/DEBUG(3412): Build fingerprint: 'vodafone_uk/htc_ace/ace:2.3.5/GRJ90/208029.3:user/release-keys' 04-02 13:24:50.701: I/DEBUG(3412): pid: 3526, tid: 3539 >>> com.more2create.cityisland <<< 04-02 13:24:50.701: I/DEBUG(3412): 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 04-02 13:24:50.701: I/DEBUG(3412): 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 04-02 13:24:50.741: I/DEBUG(3412): #02 pc 00089e24 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #03 pc 00091f14 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #04 pc 0006087a /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #05 pc 00060942 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #06 pc 00063210 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #07 pc 000835e0 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #08 pc 00014504 /system/lib/egl/libGLESv1_CM_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #09 pc 0001d3c0 /system/lib/egl/libGLESv1_CM_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): #10 pc 0002be40 /system/lib/libandroid_runtime.so 04-02 13:24:50.741: I/DEBUG(3412): #11 pc 00018174 /system/lib/libdvm.so 04-02 13:24:50.741: I/DEBUG(3412): code around pc: 04-02 13:24:50.741: I/DEBUG(3412): afd0d1e0 f5d1f100 e2522040 f400022d f400422d 04-02 13:24:50.741: I/DEBUG(3412): afd0d1f0 2afffff8 e2822040 e2522020 3a000003 04-02 13:24:50.741: I/DEBUG(3412): afd0d200 f421020d e2522020 f400022d 2afffffb 04-02 13:24:50.741: I/DEBUG(3412): afd0d210 e2822020 e3120010 0a000001 f4210a0d 04-02 13:24:50.741: I/DEBUG(3412): afd0d220 f4000a2d e1b0ce82 3a000001 f421070d 04-02 13:24:50.741: I/DEBUG(3412): code around lr: 04-02 13:24:50.741: I/DEBUG(3412): 806029ec e5901008 e0836005 e1560001 8a000006 04-02 13:24:50.741: I/DEBUG(3412): 806029fc e5903000 e1a0100c e0830005 eb00099c 04-02 13:24:50.741: I/DEBUG(3412): 80602a0c e1a00004 e28dd008 e8bd8070 e59f004c 04-02 13:24:50.741: I/DEBUG(3412): 80602a1c e1a02005 e59fc048 e58d1000 e79e0000 04-02 13:24:50.741: I/DEBUG(3412): 80602a2c e08e100c e28000a8 ebfffef8 e3e00000 04-02 13:24:50.741: I/DEBUG(3412): stack: 04-02 13:24:50.741: I/DEBUG(3412): 45a98990 0000000a 04-02 13:24:50.741: I/DEBUG(3412): 45a98994 00000080 04-02 13:24:50.741: I/DEBUG(3412): 45a98998 00494e80 04-02 13:24:50.741: I/DEBUG(3412): 45a9899c 80886cd9 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): 45a989a0 00494e80 04-02 13:24:50.741: I/DEBUG(3412): 45a989a4 00000008 04-02 13:24:50.741: I/DEBUG(3412): 45a989a8 46b2a078 04-02 13:24:50.741: I/DEBUG(3412): 45a989ac 80898f25 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.741: I/DEBUG(3412): 45a989b0 00368360 04-02 13:24:50.741: I/DEBUG(3412): 45a989b4 00000008 04-02 13:24:50.741: I/DEBUG(3412): 45a989b8 00000080 04-02 13:24:50.741: I/DEBUG(3412): 45a989bc 80899041 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:50.751: I/DEBUG(3412): 45a989c0 00000008 04-02 13:24:50.751: I/DEBUG(3412): 45a989c4 00000000 04-02 13:24:50.751: I/DEBUG(3412): 45a989c8 df002777 04-02 13:24:50.751: I/DEBUG(3412): 45a989cc e3a070ad 04-02 13:24:50.751: I/DEBUG(3412): #00 45a989d0 4b89de00 04-02 13:24:50.751: I/DEBUG(3412): 45a989d4 80602a0c /system/lib/libgsl.so 04-02 13:24:50.751: I/DEBUG(3412): #01 45a989d8 00368360 04-02 13:24:50.751: I/DEBUG(3412): 45a989dc 00000020 04-02 13:24:50.751: I/DEBUG(3412): 45a989e0 004aa8e0 04-02 13:24:50.751: I/DEBUG(3412): 45a989e4 00371648 04-02 13:24:50.751: I/DEBUG(3412): 45a989e8 004aa8fc 04-02 13:24:50.751: I/DEBUG(3412): 45a989ec 80889e27 /system/lib/egl/libGLESv2_adreno200.so 04-02 13:24:51.132: I/BootReceiver(1361): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE) 04-02 13:24:51.142: I/DEBUG(3412): debuggerd committing suicide to free the zombie! 04-02 13:24:51.182: I/DEBUG(3544): debuggerd: Nov 22 2011 21:11:52 04-02 13:24:51.222: D/dalvikvm(1361): GC_FOR_MALLOC freed 551K, 36% free 8894K/13703K, external 1258K/1770K, paused 78ms 04-02 13:24:51.222: V/DeviceStorageMonitorService(1361): freeMemory=1053483008 04-02 13:24:51.232: D/DeviceStorageMonitorService(1361): OoO SMS Memory available. SMS_AVAILABLE_THRESHOLD == 524288 04-02 13:24:51.232: I/DeviceStorageMonitorService(1361): Posting Message again 04-02 13:24:51.292: I/ActivityManager(1361): Process com.more2create.cityisland (pid 3526) has died. 

Por supuesto, busqué en Google y busqué en Internet posibles correcciones, pero nada realmente útil. La gente está hablando de buscar en el archivo SO (en este caso libc.so) y encontrar la línea donde falla la aplicación.

Ahora, el problema es que estoy corriendo Windows, y no sé cómo profundizar en este asunto más profundo. Sólo estoy atascado aquí …

Por lo tanto, mi pregunta es en realidad bastante simple: ¿alguien puede ayudarme aquí? ¿Hay alguna manera de cavar en esto? ¿Puedo averiguar qué significa "# 00 pc 0000d200 /system/lib/libc.so"?

Cuando Zygote lanza una señal 11, eso significa algún acceso al proceso a una zona de memoria prohibida. Sugiero usar android_print para comprobar la zona donde el programa accede y falla, usando DDMS.

Si está utilizando opengl recordar opengl trabajo en un hilo independiente, por lo tanto, inicializar todas las variables utilizadas por opengl en constructores para evitar este tipo de problema. Intente probar rending una prueba, después utilice su código del juego.

Si u ver SIGSEGV 11, el código 1 con pila de llamadas como libgles, lo primero que debe hacer es comprobar la inicialización de OpenGL / EGL. Diferentes GPUs en Android pueden o no admitir algunas características u petición durante la inicialización de OpenGL. Si no, u debe comprobarlo, encontrar una función que falla, y cuando falla agregar un código que vuelva a intentar con los parámetros de configuración de trabajo.

Tuve un problema similar, y resolví simplemente haciendo clic en "Build -> Refresh Linked C + + Library".

Tal vez puede ser útil para alguien más.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.