15 ответов:
Если ваше приложение загружается другими людьми и сбой на удаленных устройствах, вы можете заглянуть в библиотеку отчетов об ошибках Android (ссылка в это так пост). Если это только на локальном устройстве, вы можете использовать
LogCat.даже если устройство не было подключено к хост-машине, когда произошел сбой, подключение устройства и выдачаadb logcatкоманда загрузит всю историю logcat (по крайней мере, в той степени, в которой она буферизована, что обычно является loooot данных журнала, это просто не бесконечно). Любой из этих вариантов отвечает на ваш вопрос? Если нет, можете ли вы попытаться уточнить, что вы ищете немного больше?
способ сделать это-использовать тег
Thread.UncaughtExceptionHandlerинтерфейс и передать егоThread.setDefaultUncaughtExceptionHandler()в начале вашей деятельностиonCreate(). Вот класс реализацииTopExceptionHandler.public class TopExceptionHandler implements Thread.UncaughtExceptionHandler { private Thread.UncaughtExceptionHandler defaultUEH; private Activity app = null; public TopExceptionHandler(Activity app) { this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); this.app = app; } public void uncaughtException(Thread t, Throwable e) { StackTraceElement[] arr = e.getStackTrace(); String report = e.toString()+"\n\n"; report += "--------- Stack trace ---------\n\n"; for (int i=0; i<arr.length; i++) { report += " "+arr[i].toString()+"\n"; } report += "-------------------------------\n\n"; // If the exception was thrown in a background thread inside // AsyncTask, then the actual exception can be found with getCause report += "--------- Cause ---------\n\n"; Throwable cause = e.getCause(); if(cause != null) { report += cause.toString() + "\n\n"; arr = cause.getStackTrace(); for (int i=0; i<arr.length; i++) { report += " "+arr[i].toString()+"\n"; } } report += "-------------------------------\n\n"; try { FileOutputStream trace = app.openFileOutput("stack.trace", Context.MODE_PRIVATE); trace.write(report.getBytes()); trace.close(); } catch(IOException ioe) { // ... } defaultUEH.uncaughtException(t, e); } }обратите внимание, что мы позволяем Android framework по умолчанию, чтобы справиться с этим.
в верхней части вашей деятельности зарегистрировать экземпляр выше класса, как это:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this)); ...этот обработчик сохраняет след в файле. Когда
ReaderScopeперезагрузка в следующий раз, он обнаружит этот файл и попросит пользователя, если он/она хочет отправить его разработчику.чтобы отправить трассировку стека по электронной почте, выполните следующий код, чтобы упаковать его в электронную почту.
try { BufferedReader reader = new BufferedReader( new InputStreamReader(ReaderScopeActivity.this.openFileInput("stack.trace"))); while((line = reader.readLine()) != null) { trace += line+"\n"; } } catch(FileNotFoundException fnfe) { // ... } catch(IOException ioe) { // ... } Intent sendIntent = new Intent(Intent.ACTION_SEND); String subject = "Error report"; String body = "Mail this to [email protected]: " + "\n" + trace + "\n"; sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); sendIntent.putExtra(Intent.EXTRA_TEXT, body); sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject); sendIntent.setType("message/rfc822"); ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:")); ReaderScopeActivity.this.deleteFile("stack.trace");или вы также можете использовать систему отчетов об ошибках ACRA.Просто включите АКРА.jar в ваших библиотеках проекта и используйте приведенный ниже фрагмент кода перед объявлением класса активности запуска
@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT)
Это от http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html
вы можете использовать adb:
adb logcat AndroidRuntime:E *:S
вы можете использовать Apphance. Это кросс-платформенный сервис (сейчас в основном Android, iOS с другими платформами на их пути), который позволяет удаленно отлаживать любое мобильное устройство (Android, iOS сейчас - другие в стадии разработки). Это гораздо больше, чем просто crashlog, на самом деле это гораздо больше: ведение журнала, сообщение о проблемах тестерами, crashlog. Для интеграции требуется около 5 минут. В настоящее время вы можете запросить доступ к закрытой бета-версии.
отказ от ответственности: я технический директор Polidea, компания позади Apphance и со-творцом его.
обновление: Apphance больше не является закрытой бета-версией! Обновление 2: Apphance доступен как часть http://applause.com предложение
Если вы используете Eclipse, убедитесь, что вы используете debug и не запускаете. Убедитесь, что вы находитесь в перспективе отладки (вверху справа) Возможно, вам придется нажать "возобновить" (F8) несколько раз для печати журнала. Журнал сбоев будет находиться в окне Logcat внизу-дважды щелкните для полноэкранного режима и убедитесь, что вы прокрутите вниз. Вы увидите красный текст для ошибок, след аварии будет что-то вроде
09-04 21:35:15.228: ERROR/AndroidRuntime(778): Uncaught handler: thread main exiting due to uncaught exception 09-04 21:35:15.397: ERROR/AndroidRuntime(778): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dazlious.android.helloworld/com.dazlious.android.helloworld.main}: java.lang.ArrayIndexOutOfBoundsException 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.access00(ActivityThread.java:112) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Handler.dispatchMessage(Handler.java:99) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Looper.loop(Looper.java:123) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.main(ActivityThread.java:3948) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invokeNative(Native Method) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invoke(Method.java:521) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at dalvik.system.NativeStart.main(Native Method) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 09-04 21:35:15.397: ERROR/AndroidRuntime(778): ... 11 moreважные части для этой
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException 09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)те рассказать это было исключение массива за пределами границ на линии 13 main.java в методе onCrate.
вот еще одно решение для журнала аварии.
Android market имеет инструмент под названием "Crash Collector"
проверьте следующую ссылку для получения дополнительной информации
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
вы можете использовать ACRA от этой. Включая эту библиотеку в свои проекты и настраивая ее, вы можете получать (в свою электронную почту или gdoc) их отчеты о сбоях. Извините за мой плохой английский.
Если вы ищете основной инструмент отчетности аварии, попробуйте crashlytics.
Если вы хотите более продвинутый инструмент отчетности, Checkout Gryphonet. Он регистрирует все сбои, произошедшие вместе с точной строкой кода, которая вызвала сбой вместе с автоматическими маркерами, которые показывают вам шаги, которые пользователь предпринял до сбоя и многое другое.
удачи!
используйте Acra crash reporter для android-приложения.. Acra lib
вот решение, которое может помочь вам сбросить все журналы в текстовый файл
adb logcat -d > logs.txt
вы также можете использовать библиотеку crashcatcher
Если вы просто ищете журнал сбоев, когда ваш телефон подключен к компьютеру, используйте представление DDMS в Eclipse, и отчет находится прямо в LogCat в DDMS, когда ваше приложение падает во время отладки.
Я создал эту библиотеку, чтобы решить все ваши проблемы. репортер аварии представляет собой удобный инструмент, чтобы захватить все ваши аварии и записать их в прибор, локально
просто добавьте эту зависимость, и вы хорошо идти.
compile 'com.balsikandar.android:crashreporter:1.0.1'найти все ваши сбои в устройстве локально и исправить их в удобное для вас время. Аварии сохраняются с помощью даты и времени формат легко отслеживать. Кроме того, он также предоставляет API для захвата зарегистрированных исключений, используя метод ниже.
CrashRepoter.logException(Exception e)
попробуйте приложение carsh log с android.
использовать ссылке скачать приложение.
Comments