В Android Studio отсутствует трассировка стека исключений в Logcat
Некоторое время Android Studio не показывает мне трассировку стека при сбое разработанного приложения. Все, что я вижу, это следующая строка:
06-09 16:12:36.875 26037-26037/com.a.b W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4206c700)
Это сводит меня с ума, потому что я не могу видеть, где приложение действительно падало (и какое исключение происходит). Я использую AS 1.3 Preview 2. Сначала я думал, что есть проблема с зависимостями, но теперь я использую только эти, и проблема все еще возникает:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.google.android.gms:play-services-base:7.5.0'
compile 'com.google.android.gms:play-services-analytics:7.5.0'
compile 'com.jakewharton:butterknife:6.1.0'
}
Проблема, вероятно, основана на том факте, что приложение не падает, а только зависает.
Спасибо за каждое предложение.
3 ответа
Попробуйте удалить все зависимости в вашем файле build.gradle. ИМХО, ошибка будет в play-services-analytics. Google Analytics отслеживает исключения. Попробуй удалить tracker.enableExceptionReporting(true)
в вашем коде.
То же самое начало происходить со мной после того, как я обновил свою Android Studio. После нескольких часов разочарования я обнаружил, что щелкнув раскрывающееся меню "Фильтр" в правой части экрана logcat и выбрав " Нет фильтров", даже если для него уже установлено значение "Нет фильтров", эта проблема устранена. Я не знаю, сработает ли это в вашем случае, но вы также можете попробовать, если вы еще этого не сделали.
Рассматривая ответ Радима, logcat не показывает исключения, которые обрабатываются setDefaultUncaughtExceptionHandler для основного потока.
Вы, вероятно, используете аналитическую библиотеку, которая регистрирует себя по умолчанию UncaughtExceptionHandler
,
Обратите внимание, что это относится не только к неперехваченным исключениям, но и к исключениям, в которые вы входите android.util.Log
, Код, подобный этому, должен регистрировать исключение, но будет отображать только сообщение "Failed":
try {
something();
} catch (Exception e) {
Log.v(LOG_TAG, "Failed", e);
}
Logcat покажет это без трассировки стека, независимо от того, используете ли вы Log.w
, Log.e
, так далее.
V/MyApp: Failed
Радим крикнул play-services-analytics
как распространенный преступник, но новая аналитическая библиотека Google firebase-core
; у него та же проблема. Я исправил это, отключив сбор аналитики в отладочных сборках.
Я изменил эту строку:
FirebaseAnalytics.getInstance(this);
к этому:
FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(!BuildConfig.DEBUG);
Таким образом, когда я запускаю отладочные сборки в разработке, аналитика Firebase не обрабатывает исключения, и я вижу их в logcat.
Для меня проблема заключалась в том, что студия Android показывала журналы из перезапущенной версии приложения, а не из только что умершей.
Чтобы увидеть трассировку стека из умершей версии приложения, справа от логического окна есть выпадающий список, который позволил мне выбрать журналы из мертвого приложения:
Это тогда показало правильную трассировку.