Как получить трассировку стека во время работы андроида
Мое приложение не ведет себя так, как я ожидаю. После того, как устройство перейдет в режим сна (черный экран) и включится, устройство отобразит экран моего приложения, но затем через некоторое время часть экрана исчезнет - вкладка viewpager находится под панелью инструментов.
Я поставил точку останова в последней точке, где мое приложение ничего не делает, и экран все еще прекрасен, так что это то, что делает система, но я не знаю, что.
Есть ли способ включить трассировку стека, чтобы тот метод, который система использует с этой точки, записывается в журнал, и, возможно, это позволит мне выяснить, почему скрытый просмотрщик исчезает?
Я должен упомянуть, что приложение все еще функционирует правильно, и я могу открыть ящик навигации с панели инструментов и использовать все его функции, но я больше не могу видеть вкладку viewpager, пока не создам его.
Ответы
Ответ 1
Android Studio включает отладчик, который позволяет отлаживать приложения, запущенные на Android Emulator или подключенном устройстве Android. С помощью отладчика Android Studio вы можете:
Выберите устройство для отладки вашего приложения.
Установите контрольные точки в свой код.
Изучите переменные и оцените выражения во время выполнения.
Для получения дополнительной информации посетите https://developer.android.com/studio/debug/index.html
Ответ 2
Вы можете регистрировать трассировку стека в любой точке, не бросая ничего или иначе прерывая программу.
Log.d("DERP", "check out my stack trace", new RuntimeException());
Ответ 3
Если вы можете правильно восстановить журналы, скорее всего проблема может быть решена. Как упоминалось выше, logcat - хороший вариант.
Усовершенствованное решение может быть эффективной системой регистрации, которая будет захватывать все журналы. Вы можете записать их в локальный файл для дальнейшего использования.
JakeWharton Hugo - такая потрясающая библиотека, где вам понадобятся лишь небольшие изменения, используя аннотации @DebugLog
. Это запишет ваши журналы приложений и напечатает их в logcat.
Ваш bundle.gradle (Module:app)
должен быть изменен следующим образом
apply plugin: 'com.android.application'
apply plugin: 'hugo'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
....... Other configurations
В bundle.gradle (Project)
они должны присутствовать
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
}
}
Чтобы сделать hugo
отслеживание журналов приложений @DebugLog
, необходимо добавить. Например, в ваших методах класса. Вы можете найти это в образ hugo
Теперь, чтобы вернуть журналы, выполните следующие действия.
Следующий код не должен ничего делать с библиотекой hugo, он будет просто записывать журналы из logcat.
Внутри и AsyncTask выполните следующие действия и запишите содержимое в файл и проверьте их.
@Override
protected String doInBackground(Void... voids) {
String responseString = null;
try {
Process process = Runtime.getRuntime().exec("logcat -b main -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
StringBuilder log=new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
log.append('\n');
log.append("-----------");
}
responseString = log.toString();
} catch (Exception e) {
}
return responseString;
}
Он может выглядеть сложным, но поверьте мне, его способ достаточно хорош, чем другие библиотеки, и упрощает работу разработчиков.
Вы также можете попробовать Runtime.getRuntime().exec("logcat -d");
Удачи, попробуй.!!
Ответ 4
Возможны 2 вещи. Во-первых, вы делаете что-то в onResume (некоторые сетевые хиты и/или обновление ui). Второй - это воссоздание активности. Таким образом, вы можете протестировать свое приложение, не включив его. Это поможет вам определить точную проблему.