Mi aplicación está causando una fuerza cercana en algún lugar pero en lugar de obtener una EXCEPCIÓN FATAL con el rastro de pila habitual (y muy informativo) en mi LogCat, solo recibo las siguientes 4 líneas:hilo saliendo con excepción no detectada: NO stack trace
06-27 07:08:54.546: D/dalvikvm(14351): GC_FOR_MALLOC freed 9923 objects/657416 bytes in 21ms
06-27 07:08:54.769: W/dalvikvm(14351): threadid=20: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: W/dalvikvm(14351): threadid=21: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: I/Process(14351): Sending signal. PID: 14351 SIG: 9
¡Esto está en el modo DEPURAR sin aplicar FILTROS en el LogCat!
- ¿Qué podría estar causando este comportamiento?
- ¿Hay alguna forma de saber qué está causando esta excepción?
Actualización: Gracias a @assylias abajo, que han sido capaces de poner en práctica:
final UncaughtExceptionHandler subclass = Thread.currentThread().getUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.getStackTraceString(paramThrowable);
subclass.uncaughtException(paramThread, paramThrowable);
}
});
que produjo estas líneas añadidas:
06-27 08:24:47.105: D/dalvikvm(15475): GC_FOR_MALLOC freed 13865 objects/1435952 bytes in 45ms
06-27 08:24:47.136: I/dalvikvm(15475): threadid=15: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.136: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x45209338 (56 left)
06-27 08:24:47.140: I/dalvikvm(15475): expanding stack end (0x45209300 to 0x45209000)
06-27 08:24:47.140: I/dalvikvm(15475): Shrank stack (to 0x45209300, curFrame is 0x4520937c)
06-27 08:24:47.159: I/dalvikvm(15475): threadid=16: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.159: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x4520c338 (56 left)
06-27 08:24:47.167: I/dalvikvm(15475): expanding stack end (0x4520c300 to 0x4520c000)
06-27 08:24:47.167: I/dalvikvm(15475): Shrank stack (to 0x4520c300, curFrame is 0x4520c37c)
06-27 08:24:47.175: I/dalvikvm(15475): threadid=17: stack overflow on call to Ljava/lang/AbstractStringBuilder;.enlargeBuffer:VI
06-27 08:24:47.175: I/dalvikvm(15475): method requires 28+20+20=68 bytes, fp is 0x4520f338 (56 left)
06-27 08:24:47.175: I/dalvikvm(15475): expanding stack end (0x4520f300 to 0x4520f000)
06-27 08:24:47.175: I/dalvikvm(15475): Shrank stack (to 0x4520f300, curFrame is 0x4520f37c)
Ésta es sin duda mucho más útil información, pero ahora estoy luchando con lo siguiente:
- La aplicación no se cierra forzosamente ahora, a pesar de la llamada al
subclass.uncaughtException()
. ¿Por qué? - ¿Cuál es el significado de todos los desbordamientos de pila? ¿Qué podría estar haciendo eso es tan agotador en mi pobre dispositivo de prueba de Android?
- ¿Cómo puedo saber qué parte de mi código causa esto?
Actualización:Log.getStackTraceString(paramThrowable);
era en realidad no imprimir nada. La impresión extra que recibí era de bogus subclass.uncaughtException (paramThread, paramThrowable); La forma correcta de registrar el seguimiento completo de la pila es usando Log.e(TAG, "uncaughtException", throwable).
La única pregunta que queda ahora es ¿cómo puedo volver a lanzar la excepción? Solo haz un throw paramThrowable
?
Respondiendo a mi última pregunta: Eclipse no me deja tirar sin rodear con try/catch, lo que me llevó a entender que lo que quiero no es un re-lanzamiento sino un killProcess()
. Problema resuelto.
Tal vez usar try catch para su código ayudará a identificar. –
@Mukund ¿Dónde está mi código? Ya estoy usando numerosas cláusulas try/catch en todo el lugar. –
Agregue una captura de intento más general como respuesta a continuación, que rodea todo el código en un archivo .java. –