La aplicación de Android falla con SIGABRT Signal 6 solo mientras se depura Eclipse
(4)
Tengo una aplicación que funciona perfectamente bien en un dispositivo sin un depurador adjunto. Sin embargo, tengo un problema al depurar en Eclipse:
Cuando el hilo principal se suspende durante aproximadamente 10 segundos o más (por ejemplo, después de golpear un punto de interrupción), el hilo principal arroja un SIGABRT, aparentemente procedente de libc.
La única explicación que se me ocurre es que la cola de mensajes en el hilo principal, cuando no se está sondeando, rebosa de mensajes provenientes de otro hilo. Sin embargo, no veo el crecimiento del montón cuando se suspende el hilo principal. Además, aunque mi aplicación tiene alrededor de 20 subprocesos entre todos los servicios, proveedores de contenido, receptores de difusión, hilos de http y mapeo de mapas, etc., realmente no puedo pensar en una fuente de mensajes excesivos.
Entonces mi pregunta es: ¿Cómo soluciono este problema? ¿Qué herramientas puedo usar y cómo puedo encontrar lo que está causando que mi aplicación se bloquee mientras está suspendido en el depurador?
Editar 1:
Lo único en logcat es:
02-05 22:23:54.861: I/dalvikvm(26795): threadid=3: reacting to signal 3
02-05 22:23:54.901: D/dalvikvm(26795): threadid=1: still suspended after undo (sc=1 dc=1)
02-05 22:23:54.901: I/dalvikvm(26795): Wrote stack traces to ''/data/anr/traces.txt''
02-05 22:23:58.905: A/libc(26795): Fatal signal 6 (SIGABRT) at 0x000002f5 (code=0), thread 26795 (om.myapp)
Editar 2:
La investigación adicional me lleva a creer que Android está matando intencionalmente mi proceso porque erróneamente piensa que el hilo de UI está bloqueado. El problema NO está en mi aplicación. Así que ahora mi pregunta es: ¿cómo impido que Android mate mi proceso mientras se depura?
Android intencionalmente mata el proceso porque cree que el hilo de UI está bloqueado, por lo que es un ANR correcto. para fines de depuración puede,
Vaya a Configuración -> Opciones de desarrollador y marque Mostrar todos los ANR.
Esto mostrará un diálogo de aplicación que no responde para las aplicaciones que se ejecutan en segundo plano. Puede hacer clic en el botón Esperar en el cuadro de diálogo para evitar que el sistema mate su proceso hasta que se adhiera el depurador. Tenga en cuenta que el diálogo se abre automáticamente para las aplicaciones que se ejecutan en primer plano. Para aplicaciones en segundo plano, debes habilitar esta opción
Esto comenzó a sucederme en Android 7.1.1
Al adjuntar el depurador, mi aplicación siempre se bloqueó, lo mismo al iniciar la aplicación en modo de depuración.
Lo que lo solucionó es simplemente:
- Ejecuta tu aplicación
- Haga clic en "Silenciar puntos de interrupción" en Depurar
- Adjuntar el depurador
- Vuelva a hacer clic en "Silenciar puntos de interrupción" para dejar de silenciar
- Hecho, la depuración funciona de nuevo
Tuve problemas similares, pero lo que Sam sugirió no ayudó; tuve que eliminar realmente los puntos de interrupción y luego funcionó para mí.
Tuve que volver a instalar el estudio de Android una vez y la segunda vez que sucedió simplemente se fue por su cuenta