Mam aplikację, która nie jest dostępna na rynku (podpisana za pomocą certyfikatu debugowania), ale chce uzyskać dane dziennika awarii, gdy tylko moja aplikacja ulegnie awarii. Gdzie mogę znaleźć dziennik, dlaczego moja aplikacja uległa awarii?Jak uzyskać dzienniki awarii systemu Android?
Odpowiedz
Jeśli Twoja aplikacja jest pobierana przez inne osoby i zawiesza się na zdalnych urządzeniach, możesz zajrzeć do biblioteki raportowania błędów Androida (wymienionej w this SO post). Jeśli jest to tylko na urządzeniu lokalnym, możesz użyć LogCat.
Nawet jeśli urządzenie nie było podłączone do komputera hosta po wystąpieniu awarii, podłączenie urządzenia i wydanie polecenia adb logcat
spowoduje pobranie całej historii logcat (przynajmniej w takim zakresie że jest zbuforowany, co zwykle jest loooot danych dziennika, to po prostu nie jest nieskończona). Czy któraś z tych opcji odpowiada na twoje pytanie? Jeśli nie, możesz spróbować wyjaśnić, czego szukasz więcej?
możesz szczegółowo opisać, jak korzystać z polecenia adb logcat? Czy uruchamiam to w katalogu/SDK/tools?Czy są jakieś flagi, które powinienem zanotować? itp. –
@ jesses.co.tt Tak, po prostu uruchom 'adb logcat' z katalogu, w którym znajduje się adb. Alternatywnie możesz użyć narzędzi SDK zawartych w wtyczce Eclipse –
OK, wielkie dzięki. –
Jeśli używasz platformy Eclipse, upewnij się, że używasz debugowania i nie uruchamiasz. Upewnij się, że jesteś w perspektywie debugowania (u góry po prawej) Być może będziesz musiał kilkakrotnie nacisnąć przycisk "Wznów" (F8), aby wydrukować dziennik. Dziennik awarii będzie w oknie Logcat u dołu - kliknij dwukrotnie, aby wyświetlić pełny ekran, a następnie przewiń do dołu. Zobaczysz czerwony tekst na błędy, ślad katastrofy będzie coś
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.access$1800(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
ważne części do tego jednego są
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)
te mówią nam, że był tablicą poza granicami wyjątku na na wiersz 13 głównej.java w metodzie onCrate.
+1 ok, to było bardzo głupie ... – UncleZeiv
Możesz użyć Apifance. Jest to usługa wieloplatformowa (obecnie głównie Android, iOS z innymi platformami na ich drodze), która pozwala zdalnie debugować dowolne urządzenie mobilne (teraz Android, iOS - inne w fazie rozwoju). To znacznie więcej niż tylko awaria, w rzeczywistości jest to o wiele więcej: logowanie, zgłaszanie problemów przez testerów, crashlog. Integracja trwa około 5 minut. Obecnie możesz poprosić o dostęp do zamkniętej wersji beta.
Nota prawna: Jestem CTO firmy Polidea, firmy odpowiedzialnej za firmę Apphance i jej współtwórcy.
Aktualizacja: Apphance nie jest już zamknięta w wersji beta! Aktualizacja 2: Apphance jest dostępna jako część http://applause.com oferuje
Właśnie wypróbowałem apphance i polubiłem to. Dokumenty pominęły kluczową kwestię podczas integrowania biblioteki apphance z aplikacją; z najnowszą wersją Eclipse ADT, musisz umieścić apphance.jar w katalogu 'libs' jako [this] (http://stackoverflow.com/a/9916751/9648). [To zatwierdzenie github) (https://github.com/johnnylambada/WorldMap/commit/235ac0461a91a080cca2cdcb7fd2059464165406) pokazuje zmiany, które musiałem wprowadzić w mojej aplikacji WorldMap do korzystania z apphance. – JohnnyLambada
@HohnnyLambada Dzięki za komentarz. Zaktualizowaliśmy dokumentację, aby było to bardziej zrozumiałe. –
to nie powinno zawierać tak wielu strzał w górę, że kosztuje 10 razy więcej niż większość budżetów na rozwój (2,500 USD miesięcznie!). – user26676
Oto kolejne rozwiązanie Crash Log.
Android Market ma narzędzie o nazwie "Crash Collector"
check Poniższy link, aby uzyskać więcej informacji
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
Nie działa w systemie Android 4.1 i nowszych (nowe uprawnienia do odczytu dzienników). – cat
Można użyć Acra z this. Włączając tę bibliotekę do twoich projektów i konfigurując ją, możesz otrzymywać (do wiadomości e-mail lub gdocs) swoje raporty o awariach. Przepraszam za mój zły angielski.
Jeśli szukasz dziennika awarii, gdy telefon jest podłączony do komputera, użyj widoku DDMS w Eclipse, a raport znajduje się w LogCat w DDMS, gdy Twoja aplikacja ulega awarii podczas debugowania.
Można również użyć bibliotekę crashcatcher
Zastosowanie Acra zgłaszania awarii dla Android App ..Acra lib
Drogą do tego celu jest implementować interfejs Thread.UncaughtExceptionHandler
i przekazać go do Thread.setDefaultUncaughtExceptionHandler()
na początku swoją aktywność na onCreate()
. Oto klasa implementacji 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);
}
}
Uwaga Zezwalamy na obsługę domyślnejUEH z Androidem.
Na szczycie swojej działalności zarejestrować wystąpienie powyższej klasy tak:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...
Ten uchwyt zapisuje ślad w pliku. Gdy następnym razem uruchomi się ponownie ReaderScope
, wykryje plik i wyświetli monit o podanie adresu e-mail dewelopera.
Aby wysłać wiadomość e-mail do śledzenia stosu, wykonaj następujący kod, aby spakować go w wiadomości e-mail.
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");
Albo można też użyć ACRA Raportowanie błędów System.Just Dołącz ACRA.jar bibliotekami w swoim projekcie i używać poniższego fragmentu kodu przed wyrzutni deklaracji klasy aktywność
@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT)
Czy linia domyślnieUEH.uncaughtException (t, e); wywołać metodę uncaughtException() w nieskończoność? –
To z http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html
można użyć adb:
adb logcat AndroidRuntime:E *:S
'adb logcat -d CRASH: E *: S *' –
Tak. Udało się: adb logcat AndroidRuntime: E *: S –
Jeżeli Państwo ponowne szukanie podstawowego narzędzia do zgłaszania awarii, spróbuj crashlytics.
Jeśli chcesz bardziej zaawansowane narzędzie do zgłaszania, skorzystaj z usługi Checkout Gryphonet. Rejestruje wszystkie awarie występujące wraz z dokładną linią kodu, która spowodowała awarię wraz z automatycznymi znacznikami, które pokazują kroki, które użytkownik wykonał przed awarią i więcej.
Powodzenia!
Wypróbuj aplikację Log Carsh z Androidem. Aby pobrać aplikację, użyj aplikacji
.
Utworzyłem tę bibliotekę, aby rozwiązać wszystkie problemy. Crash Reporter is a handy tool to capture all your crashes and log them in device locally
Po prostu dodaj tę zależność i jesteś gotowy.
compile 'com.balsikandar.android:crashreporter:1.0.1'
Znajdź wszystkie swoje awarie w urządzeniu lokalnie i napraw je w dogodnym dla Ciebie momencie. Awarie są zapisywane przy użyciu łatwego do śledzenia formatu daty i czasu. Dodatkowo zapewnia również API do przechwytywania Logged Exceptions za pomocą poniższej metody.
CrashRepoter.logException(Exception e)
Jaka jest klasa Java, która służyła do pobierania dzienników awarii urządzenia? – Xenolion
Można spróbować tego z konsoli: -
adb logcat -b krach
- 1. Jak odczytać dzienniki awarii systemu iOS 4?
- 2. Android: Jak zdobyć dzienniki jądra po awarii jądra?
- 3. Jak uzyskać wygląd systemu Android?
- 4. Dzienniki awarii Firebase z adresami URL redaktowanymi
- 5. Symulatory awarii systemu iOS
- 6. Dziennik zdarzeń systemu Windows a dzienniki tekstów
- 7. Jak uzyskać czas uruchamiania systemu Android?
- 8. Zapisywanie plików w pamięci zewnętrznej w przypadku awarii systemu Android
- 9. Gdzie mogę wyświetlić dzienniki awarii usługi Google Analytics iOS?
- 10. Debugowanie awarii przeglądarki Android 2.3
- 11. android: jak utworzyć plik raportu awarii ACRA?
- 12. jak uzyskać przycisk "Gotowe" na klawiaturze systemu Android?
- 13. Selektor obrazów preferencji systemu Android - jak uzyskać wynik w DialogPreference
- 14. Winston: jak obracać dzienniki
- 15. Kronikowanie systemu plików Android
- 16. Jak uzyskać dzienniki dla zadań usługi dokowania w "przygotowywaniu" stanu
- 17. Jak rozwiązać problem niewyjaśnionych awarii systemu iOS w crashlytics?
- 18. Przydatne zasoby systemu Android
- 19. Jak czytasz dzienniki zmian CPAN?
- 20. Jak monitorować dzienniki serwera Meteor.com
- 21. Jak mogę sprawdzić dzienniki Oozie?
- 22. Nakładka systemu Android 4.0
- 23. Pasek wyszukiwania trwałego systemu Android
- 24. Aplikacja systemu Android ulega awarii, ale nie uruchamia się ponownie - wznawia się z innego punktu aplikacji
- 25. Gdzie można znaleźć dzienniki Google Chrome?
- 26. Plik dziennika systemu Android
- 27. Nie można uzyskać podzielonego paska akcji systemu Android 4.0
- 28. Awaria systemu Android
- 29. Android Studio nie wyświetla dzienniki, których autorem jest nazwą pakietu
- 30. Kodowanie systemu Android Gradle
[biblioteka Android uchwycić i zgłaszać awarie] (https://github.com/ajitsing/Sherlock) –