поток завершается с необработанным исключением: НЕТ трассировки стека

Мое приложение вызывает принудительное закрытие где-то, но вместо того, чтобы получить FATAL EXCEPTION с обычной (и очень информативной) трассировкой стека в моем LogCat, я получаю только следующие 4 строки:

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

Это в режиме DEBUG с К LogCat НЕ ПРИМЕНЯЮТСЯ ФИЛЬТРЫ!

  • Что может быть причиной такого поведения?
  • Есть ли способ узнать, что вызывает это исключение?

Обновление: Благодаря @assylias, приведенному ниже, я смог реализовать:

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);
    }
});

В результате были добавлены следующие строки:

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)

Это, безусловно, гораздо более полезная информация, но сейчас я борюсь с следующее:

  • Теперь приложение не закрывается принудительно, несмотря на вызов subclass.uncaughtException(). Почему?
  • В чем смысл всех этих переполнений стека? Что я мог делать, что так утомительно для моего бедного тестового устройства Android?
  • Как я могу определить, какая часть моего кода вызывает это?

Обновление:Log.getStackTraceString(paramThrowable);на самом деле ничего не печатал. Дополнительный отпечаток, который я получил, был из фиктивногоподкласса.uncaughtException(paramThread, paramThrowable); Правильный способ регистрации полной трассировки стека — использовать Log.e(TAG, "uncaughtException", throwable).

Остался только один вопрос: как повторно выдать исключение? Просто выполните throw paramThrowable?

Отвечая на мой последний вопрос: Eclipse не позволит мне выполнить бросок без окружения с помощью try/catch, что привело меня к пониманию того, что мне нужен не повторный бросок, а killProcess(). Задача решена.

11
задан Community 23 May 2017 в 12:17
поделиться