Android Fatal señal 11 (SIGSEGV) en 0x636f7d89 (código = 1). ¿Cómo se puede localizar?

He estado leyendo los otros artículos sobre el seguimiento de las razones para obtener un SIGSEGV en una aplicación para Android. Planeo explorar mi aplicación para posibles NullPointers relacionados con el uso de Canvas, pero mi SIGSEGV barfs una dirección de memoria diferente cada vez. Además, he visto code=1 y code=2 . Si la dirección de memoria era 0x00000000 , tendría una pista que es un NullPointer.

El último que conseguí era un code=2 :

 A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) 

¿Alguna sugerencia sobre cómo rastrear esto?

Tengo un sospechoso, pero no estoy interesado en experimentar con él todavía. Mi aplicación utiliza la API de OSMDroid para la asignación sin conexión. La clase OverlayItem representa los marcadores / nodos en el mapa. Tengo un servicio que recopila datos a través de la red para rellenar el OverlayItem que luego se muestran en el mapa. En un esfuerzo por simplificar mi diseño, extendí OverlayItem a mi propia clase NodeOverlayItem, que incluye algunos atributos de adición que utilizo en la actividad de IU y en el servicio. Esto me dio un único punto de información de artículo para la interfaz de usuario y el servicio. Utilicé Intents para transmitir a la Actividad para actualizar el mapa de IU cuando algo cambiaba. La actividad se enlaza al servicio y hay un método de servicio para obtener la lista de NodeOverlayItem. Creo que podría ser el uso de la API de OSMDroid de OverlayItem y mi información de nodo de actualización de servicio al mismo tiempo. (Un problema de concurrencia)

Mientras escribo esto, creo que ese es realmente el problema. El dolor de cabeza no está dividiendo el nodo y el elemento superposición de NodeOverlayItem, es que la actividad necesitará algunos datos del nodo, que contiene el servicio. Además, cuando se crea la actividad (onResume, etc …), los objetos OverlayItem tendrán que volver a crearse a partir de los datos de nodo que el servicio ha estado manteniendo mientras la actividad estaba ausente. Por ejemplo, usted inicia la aplicación, el servicio recopila datos, la interfaz de usuario lo muestra, va a Inicio y luego vuelve a la aplicación, la actividad tendrá que extraer y volver a crear los elementos de superposición de los últimos datos de nodo de servicio.

Sé que esto no es una pregunta grande o clara. Es como si todas mis preguntas SO son nichos u oscuros. Si alguien tiene una sugerencia sobre cómo interpretar esos errores SIGSEGV , sería muy apreciado!

UPDATE Aquí se muestra el último bloqueo capturado durante una sesión de depuración. Tengo 3 de estos dispositivos que se utilizan para las pruebas y no todo el accidente confiable cuando estoy desarrollando y probando. He incluido un poco más sólo para que la GC de registro podría ser observado. Puede ver que el problema probablemente no está relacionado con el agotamiento de la memoria.

 03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though. 03-03 02:02:38.406: D/CommService(7477): Checking OLSRd info... 03-03 02:02:38.460: D/CommService(7477): Monitoring nodes... 03-03 02:02:38.515: D/dalvikvm(7477): GC_CONCURRENT freed 2050K, 16% free 17151K/20359K, paused 3ms+6ms 03-03 02:02:38.515: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.515: D/CommService(7477): Forwarding packet (4f68802cf10684a83ac4936ebb3c934d) along to other nodes. 03-03 02:02:38.609: I/CommService(7477): Received packet from: 192.168.1.100 03-03 02:02:38.609: D/CommService(7477): Forwarding packet (e4bc81e91ec92d06f83e03068f52ab4) along to other nodes. 03-03 02:02:38.609: D/CommService(7477): Already processed this packet: 4204a5b27745ffe5e4f8458e227044bf 03-03 02:02:38.609: A/libc(7477): Fatal signal 11 (SIGSEGV) at 0x68f52abc (code=1) 03-03 02:02:38.914: I/DEBUG(4008): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 03-03 02:02:38.914: I/DEBUG(4008): Build fingerprint: 'Lenovo/IdeaTab_A1107/A1107:4.0.4/MR1/eng.user.20120719.150703:user/release-keys' 03-03 02:02:38.914: I/DEBUG(4008): pid: 7477, tid: 7712 >>> com.test.testm <<< 03-03 02:02:38.914: I/DEBUG(4008): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 68f52abc 03-03 02:02:38.914: I/DEBUG(4008): r0 68f52ab4 r1 412ef268 r2 4d9c3bf4 r3 412ef268 03-03 02:02:38.914: I/DEBUG(4008): r4 001ad8f8 r5 4d9c3bf4 r6 412ef268 r7 4c479df8 03-03 02:02:38.914: I/DEBUG(4008): r8 4d9c3c0c r9 4c479dec 10 46cf260a fp 4d9c3c24 03-03 02:02:38.914: I/DEBUG(4008): ip 40262a04 sp 4d9c3bc8 lr 402d01dd pc 402d0182 cpsr 00000030 03-03 02:02:38.914: I/DEBUG(4008): d0 00000001000c0102 d1 3a22364574614c7d 03-03 02:02:38.914: I/DEBUG(4008): d2 403fc0000000007d d3 363737343433350a 03-03 02:02:38.914: I/DEBUG(4008): d4 49544341223a2273 d5 6f6567222c224556 03-03 02:02:38.914: I/DEBUG(4008): d6 3a223645676e6f4c d7 000000013835372d 03-03 02:02:38.914: I/DEBUG(4008): d8 0000000000000000 d9 4040000000000000 03-03 02:02:38.914: I/DEBUG(4008): d10 0000000000000000 d11 4040000000000000 03-03 02:02:38.914: I/DEBUG(4008): d12 4040000000000000 d13 0000000000000021 03-03 02:02:38.914: I/DEBUG(4008): d14 0000000000000000 d15 0000000000000000 03-03 02:02:38.914: I/DEBUG(4008): d16 3fe62e42fefa39ef d17 3ff0000000000000 03-03 02:02:38.914: I/DEBUG(4008): d18 3fe62e42fee00000 d19 0000000000000000 03-03 02:02:38.914: I/DEBUG(4008): d20 0000000000000000 d21 3ff0000000000000 03-03 02:02:38.914: I/DEBUG(4008): d22 4028000000000000 d23 3ff0000000000000 03-03 02:02:38.914: I/DEBUG(4008): d24 0000000000000000 d25 3ff0000000000000 03-03 02:02:38.914: I/DEBUG(4008): d26 0000000000000000 d27 c028000000000000 03-03 02:02:38.914: I/DEBUG(4008): d28 0000000000000000 d29 3ff0000000000000 03-03 02:02:38.914: I/DEBUG(4008): d30 3ff0000000000000 d31 3fecccccb5c28f6e 03-03 02:02:38.914: I/DEBUG(4008): scr 60000013 03-03 02:02:39.046: I/DEBUG(4008): #00 pc 0006b182 /system/lib/libcrypto.so (EVP_DigestFinal_ex) 03-03 02:02:39.046: I/DEBUG(4008): #01 pc 0006b1d8 /system/lib/libcrypto.so (EVP_DigestFinal) 03-03 02:02:39.054: I/DEBUG(4008): #02 pc 0001f814 /system/lib/libnativehelper.so 03-03 02:02:39.054: I/DEBUG(4008): #03 pc 0001ec30 /system/lib/libdvm.so (dvmPlatformInvoke) 03-03 02:02:39.054: I/DEBUG(4008): #04 pc 00058c70 /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread) 03-03 02:02:39.054: I/DEBUG(4008): code around pc: 03-03 02:02:39.054: I/DEBUG(4008): 402d0160 0003151e 4604b570 f7ff460d 4620ff81 ....p..FF... F 03-03 02:02:39.054: I/DEBUG(4008): 402d0170 f7ff4629 bd70ff93 4604b570 460e6800 )F....pp.FhF 03-03 02:02:39.054: I/DEBUG(4008): 402d0180 68834615 dd062b40 21fa4810 44784a10 .Fh@+...H.!.JxD 03-03 02:02:39.054: I/DEBUG(4008): 402d0190 f7c8447a 6821f80f 698a4620 47904631 zD....!h F.i1F.G 03-03 02:02:39.054: I/DEBUG(4008): 402d01a0 b1154606 68836820 6822602b b12b6a13 .F.. h.h+`"h.j+. 03-03 02:02:39.054: I/DEBUG(4008): code around lr: 03-03 02:02:39.054: I/DEBUG(4008): 402d01bc 68e06821 21006c4a ea0af7c4 bd704630 !h.hJl.!....0Fp. 03-03 02:02:39.054: I/DEBUG(4008): 402d01cc 00031492 000314b5 4604b570 ffcef7ff ........p..F.... 03-03 02:02:39.054: I/DEBUG(4008): 402d01dc 46204605 ff12f7ff bd704628 4604b573 .F F....(Fp.s..F 03-03 02:02:39.054: I/DEBUG(4008): 402d01ec 2102460d fb36f002 42ab6823 b123d020 .F.!..6.#hB .#. 03-03 02:02:39.054: I/DEBUG(4008): 402d01fc b1136c5b f7c868e0 68a0fccf 05c26025 [l...h.....h%`.. 03-03 02:02:39.054: I/DEBUG(4008): memory map around addr 68f52abc: 03-03 02:02:39.054: I/DEBUG(4008): 4d8c5000-4d9c4000 03-03 02:02:39.054: I/DEBUG(4008): (no map for address) 03-03 02:02:39.054: I/DEBUG(4008): b0001000-b0009000 /system/bin/linker 03-03 02:02:39.054: I/DEBUG(4008): stack: 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b88 408d1f90 /system/lib/libdvm.so 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b8c 412ef258 /dev/ashmem/dalvik-heap (deleted) 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b90 00000001 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b94 408d6c58 /system/lib/libdvm.so 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b98 408d6fa8 /system/lib/libdvm.so 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b9c 4c479dec 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba0 46cf260a /system/framework/core.odex 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba4 408735e7 /system/lib/libdvm.so 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba8 412ef258 /dev/ashmem/dalvik-heap (deleted) 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bac 002bf070 [heap] 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb0 412ef258 /dev/ashmem/dalvik-heap (deleted) 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb4 00000000 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb8 412ef268 /dev/ashmem/dalvik-heap (deleted) 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bbc 00000000 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bc0 df0027ad 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bc4 00000000 03-03 02:02:39.054: I/DEBUG(4008): #00 4d9c3bc8 001ad8f8 [heap] 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bcc 002ae0b8 [heap] 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bd0 00000004 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bd4 402d01dd /system/lib/libcrypto.so 03-03 02:02:39.054: I/DEBUG(4008): #01 4d9c3bd8 001ad8f8 [heap] 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bdc 002ae0b8 [heap] 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3be0 00000004 03-03 02:02:39.054: I/DEBUG(4008): 4d9c3be4 4024e817 /system/lib/libnativehelper.so 03-03 02:02:39.406: D/CommService(7477): Checking OLSRd info... 03-03 02:02:39.500: D/CommService(7477): Monitoring nodes... 03-03 02:02:39.500: D/dalvikvm(7477): GC_FOR_ALLOC freed 2073K, 16% free 17118K/20359K, paused 51ms 03-03 02:02:39.632: D/dalvikvm(7477): GC_CONCURRENT freed 1998K, 16% free 17162K/20359K, paused 2ms+4ms 03-03 02:02:40.406: D/CommService(7477): Checking OLSRd info... 03-03 02:02:40.445: D/CommService(7477): Monitoring nodes... 03-03 02:02:40.562: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17158K/20359K, paused 3ms+4ms 03-03 02:02:41.406: D/CommService(7477): Checking OLSRd info... 03-03 02:02:41.445: D/CommService(7477): Monitoring nodes... 03-03 02:02:41.531: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17154K/20359K, paused 3ms+12ms 03-03 02:02:42.406: D/CommService(7477): Checking OLSRd info... 03-03 02:02:42.445: D/CommService(7477): Monitoring nodes... 03-03 02:02:42.507: D/dalvikvm(7477): GC_CONCURRENT freed 2068K, 16% free 17128K/20359K, paused 3ms+4ms 03-03 02:02:42.679: D/dalvikvm(7477): GC_CONCURRENT freed 2006K, 16% free 17161K/20359K, paused 2ms+12ms 03-03 02:02:43.140: I/BootReceiver(1236): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE) 03-03 02:02:43.210: D/dalvikvm(1236): GC_FOR_ALLOC freed 912K, 17% free 10207K/12295K, paused 62ms 03-03 02:02:43.265: D/dalvikvm(1236): GC_FOR_ALLOC freed 243K, 16% free 10374K/12295K, paused 49ms 03-03 02:02:43.265: I/dalvikvm-heap(1236): Grow heap (frag case) to 10.507MB for 196628-byte allocation 

En primer lugar, obtenga su huella de pila de lápida, se imprimirá cada vez que su aplicación se bloquee. Algo como esto:

 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'XXXXXXXXX' pid: 1658, tid: 13086 >>> system_server <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 64696f7e r0 00000000 r1 00000001 r2 ad12d1e8 r3 7373654d r4 64696f72 r5 00000406 r6 00974130 r7 40d14008 r8 4b857b88 r9 4685adb4 10 00974130 fp 4b857ed8 ip 00000000 sp 4b857b50 lr afd11108 pc ad115ebc cpsr 20000030 d0 4040000040000000 d1 0000004200000003 d2 4e72cd924285e370 d3 00e81fe04b1b64d8 d4 3fbc71c7009b64d8 d5 3fe999999999999a d6 4010000000000000 d7 4000000000000000 d8 4000000000000000 d9 0000000000000000 d10 0000000000000000 d11 0000000000000000 d12 0000000000000000 d13 0000000000000000 d14 0000000000000000 d15 0000000000000000 scr 80000012 #00 pc 000108d8 /system/lib/libc.so #01 pc 0003724c /system/lib/libxvi020.so #02 pc 0000ce02 /system/lib/libxvi020.so #03 pc 0000d672 /system/lib/libxvi020.so #04 pc 00010cce /system/lib/libxvi020.so #05 pc 00004432 /system/lib/libwimax_jni.so #06 pc 00011e74 /system/lib/libdvm.so #07 pc 0004354a /system/lib/libdvm.so #08 pc 00017088 /system/lib/libdvm.so #09 pc 0001c210 /system/lib/libdvm.so #10 pc 0001b0f8 /system/lib/libdvm.so #11 pc 00059c24 /system/lib/libdvm.so #12 pc 00059e3c /system/lib/libdvm.so #13 pc 0004e19e /system/lib/libdvm.so #14 pc 00011b94 /system/lib/libc.so #15 pc 0001173c /system/lib/libc.so code around pc: ad115e9c 4620eddc bf00bd70 0001736e 0001734e ad115eac 4605b570 447c4c0a f7f44620 e006edc8 ad115ebc 42ab68e3 68a0d103 f7f42122 6864edd2 ad115ecc d1f52c00 44784803 edbef7f4 bf00bd70 ad115edc 00017332 00017312 2100b51f 46682210 code around lr: afd110e8 e2166903 1a000018 e5945000 e1a02004 afd110f8 e2055a02 e1a00005 e3851001 ebffed92 afd11108 e3500000 13856002 1a000001 ea000009 afd11118 ebfffe50 e1a01004 e1a00006 ebffed92 afd11128 e1a01005 e1550000 e1a02006 e3a03000 stack: 4b857b10 40e43be8 4b857b14 00857280 4b857b18 00000000 4b857b1c 034e8968 4b857b20 ad118ce9 /system/lib/libnativehelper.so 4b857b24 00000002 4b857b28 00000406 

A continuación, utilice la utilidad addr2line ( addr2line en su cadena de herramientas NDK) para encontrar la función que se bloquea. En esta muestra, usted hace

 addr2line -e -f libc.so 0001173c 

Y verá dónde obtuvo el problema. Por supuesto esto no le ayudará ya que está en libc.

Así que puede combinar las utilidades de arm-eabi-objdump para encontrar el objetivo final.

Créanme, es una tarea difícil.




Sólo para una actualización. Creo que estaba haciendo la compilación nativa de Android desde el árbol de la fuente entera durante bastante tiempo, hasta que hoy me he leído cuidadosamente los documentos de NDK. Desde la liberación NDK-r6, ha proporcionado una utilidad llamada ndk-stack .

A continuación se muestra el contenido de los documentos oficiales de NDK con la bola de alquitrán NDK-r9.

Visión de conjunto:

ndk-stack es una herramienta sencilla que te permite filtrar trazas de pila tal como aparecen en la salida de 'adb logcat' y reemplazar cualquier dirección dentro de una biblioteca compartida con los valores correspondientes:.

En pocas palabras, traducirá algo como:

  I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' I/DEBUG ( 31): pid: 351, tid: 351 %gt;%gt;%gt; /data/local/ndk-tests/crasher <<< I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8 I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000 I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030 I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so I/DEBUG ( 31): 

En la salida más legible:

  ********** Crash dump: ********** Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<< signal 11 (SIGSEGV), fault addr 0d9f00d8 Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13 Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5 Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9 Stack frame #03 pc 000191ac /system/lib/libc.so Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14 Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19 Stack frame #06 pc 0000d362 /system/lib/libc.so 

Uso:

Para ello, primero necesitará un directorio que contenga versiones simbólicas de las bibliotecas compartidas de su aplicación. Si utiliza el sistema de compilación NDK (es decir, ndk-build ), éstos siempre se ndk-build bajo $ PROJECT_PATH / obj / local /, donde se armeabi ABI del dispositivo (es decir, armeabi por defecto).

Puede alimentar el texto logcat como entrada directa al programa, por ejemplo:

 adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi 

O puede utilizar la opción -dump para especificar el logcat como un archivo de entrada, por ejemplo:

 adb logcat > /tmp/foo.txt $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt 

IMPORTANTE:

La herramienta busca la línea inicial que contiene los inicios en la salida logcat , es decir algo que se ve como:

  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 

Al copiar / pegar trazas, no olvide esta línea de las trazas, o ndk-stack no funcionará correctamente.

QUE HACER:

Una versión futura de ndk-stack intentará iniciar adb logcat y seleccionar la ruta de la biblioteca automáticamente. Por ahora, tendrás que hacer estos pasos manualmente.

A partir de ahora, ndk-stack no maneja bibliotecas que no tienen información de depuración en ellas. Puede ser útil intentar detectar el punto de entrada de función más cercano a una dirección de PC dada (por ejemplo, como en el ejemplo libc.so anteriormente).

¡DE ACUERDO! Lo siento mucho a aquellos que realmente han enviado comentarios y respuestas, pero encontré el problema. No creo que esto ayude a muchos otros tratando de rastrear su SIGSEGV personal, pero el mío (y fue muy difícil) estaba enteramente relacionado con esto:

https://code.google.com/p/android/issues/detail?id=8709

El libcrypto.so en mi tipo de volcado de clued me pulg Hago un hash MD5 de datos de paquetes cuando se trata de determinar si ya he visto el paquete, y saltarlo si yo tuviera. Pensé en un punto que esto era un asunto feo del hilo relacionado a seguir esos hashes, pero resultó que era la clase de java.security.MessageDigest! ¡No es un hilo seguro!

Lo cambié con un UID que estaba rellenando en cada paquete basado en el dispositivo UUID y una marca de tiempo. No hay problemas desde entonces.

Supongo que la lección que puedo impartir a los que estaban en mi situación es, incluso si eres una aplicación 100% Java, presta atención a la biblioteca nativa y el símbolo que se indica en el volcado de bloqueo de pistas. Buscar Google para SIGSEGV + el nombre lib .so ir mucho más lejos que el código inútil = 1, etc … A continuación, piense en dónde su aplicación Java podría tocar el código nativo, incluso si no es nada que está haciendo. Cometí el error de asumir que era un problema de subprocesamiento de Service + UI donde el Canvas dibujaba algo que era nulo (el caso más común que buscaba en Google en SIGSEGV) e ignoraba la posibilidad de que pudiera estar completamente relacionado con el código que escribí que era Relacionados con la lib .so en el volcado de choque. Naturalmente, java.security usaría un componente nativo en libcrypto.so por velocidad, así que una vez que me enteré, busqué Google para Android + SIGSEGV + libcrypto.so y encontré el problema documentado. ¡Buena suerte!

También recibí este error muchas veces y lo resolví. Este error se enfrentará en caso de gestión de memoria en el lado nativo.

Su aplicación accede a la memoria fuera de su espacio de direcciones. Esto es más probable que un acceso de puntero no válido. SIGSEGV = error de segmentación en código nativo. Dado que no se produce en código Java, no verá una traza de pila con detalles. Sin embargo, aún puede ver alguna información de seguimiento de la pila en el logcat si observa un poco después de que el proceso de aplicación se bloquea. No le indicará el número de línea dentro del archivo, pero le dirá qué archivos de objeto y direcciones estaban en uso en la cadena de llamadas. A partir de ahí, a menudo puede averiguar qué área del código es problemático. También puede configurar una conexión nativa de gdb al proceso de destino y capturarlo en el depurador.

Estaba recibiendo este error al guardar un objeto en las preferencias compartidas como una cadena convertida de gson. El Gson String no era bueno, por lo que recuperar y deserializar el objeto no funcionaba correctamente. Esto significaba que cualquier acceso posterior al objeto resultó en este error. De miedo 🙂

Estaba recibiendo este error al usar un mapa de bits como este:

 bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.myBitMap); 

Lo que arregló el problema para mí fue reducir el tamaño del mapa de bits (> 1000px de alto a 700px).

Me he enfrentado con SIGSEGV en Android 4.4.4 (Nexus, Samsung) Y resultó que el error fatal fue en el analizar null String usando DecimalFormat

  static DecimalFormat decimalFormat = new DecimalFormat("###,###.###"); void someMethod(String value) { ... Number number = decimalFormat.parse(value);//value is null, SIGSEGV will happen` ... } 

En Android> 21 se manejó con éxito con try / catch

He encontrado este error cuando intenté acceder al 'lienzo' fuera de onDraw()

  private Canvas canvas; @Override protected void onDraw(Canvas canvas) { this.canvas = canvas; ....... } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { canvas.save(); // here 

Una muy mala práctica: /

Compruebe su código JNI / nativo. Una de mis referencias era nula, pero era intermitente, así que no era muy obvio.

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