Ho un'app che non si trova sul mercato (firmata con un certificato di debug), ma vorrei ottenere i dati del registro di crash, ogni volta che la mia applicazione si blocca. Dove posso trovare un registro dei motivi per cui la mia app si è bloccata?Come ottenere i registri degli arresti anomali di Android?
risposta
Se la tua app viene scaricata da altre persone e si blocca su dispositivi remoti, è consigliabile esaminare una libreria di segnalazione degli errori Android (riferimento in this SO post). Se è solo sul proprio dispositivo locale, è possibile utilizzare LogCat.
Anche se il dispositivo non era connesso a un computer host quando si è verificato l'arresto anomalo, il collegamento del dispositivo e l'emissione di un comando adb logcat
scaricheranno l'intera cronologia logcat (almeno nella misura che è buffered che di solito è un loooot di dati di log, non è semplicemente infinito). Una di queste opzioni risponde alla tua domanda? Se no, puoi tentare di chiarire che cosa stai cercando un po 'di più?
puoi dettagliare come usare il comando adb logcat? Lo faccio all'interno della directory/SDK/tools?Ci sono delle bandiere che dovrei notare? ecc. –
@ jesses.co.tt Sì, basta eseguire 'adb logcat' da qualunque directory adb si trovi. In alternativa è possibile utilizzare gli strumenti SDK inclusi nel plugin Eclipse –
Ok, grazie mille. –
Se si utilizza Eclipse, assicurarsi di utilizzare il debug e non eseguire. Assicurati di essere nella prospettiva di debug (in alto a destra) Potrebbe essere necessario premere 'Riprendi' (F8) alcune volte affinché il registro stampi. Il registro degli arresti anomali si troverà nella finestra Logcat in basso, doppio clic per schermo intero e assicurati di scorrere verso il basso. Vedrete testo rosso per gli errori, la traccia incidente sarà qualcosa di simile
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
Le parti importanti per questo sono
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)
chi ci dicono che era una serie di eccezioni limiti su su riga 13 di main.java nel metodo onCrate.
+1 ok questo è stato molto sciocco da parte mia ... – UncleZeiv
È possibile utilizzare Apphance. Si tratta di un servizio multipiattaforma (ora principalmente Android, iOS con altre piattaforme sulla loro strada) che consente di eseguire il debug da remoto su qualsiasi dispositivo mobile (Android, iOS ora - altri in fase di sviluppo). È molto più di un semplice crashlog, anzi è molto di più: logging, segnalazione di problemi da parte di tester, crashlogs. Ci vogliono circa 5 minuti per integrarsi. Attualmente è possibile richiedere l'accesso alla versione beta chiusa.
Disclaimer: Sono CTO di Polidea, una società dietro Apphance e co-creatore di esso.
Aggiornamento: Apphance non è più closed beta! Aggiornamento 2: Apphance è disponibile come parte di http://applause.com offrendo
Ho appena provato l'apphance e mi piace. I documenti hanno perso un punto chiave quando si integrava apphance lib nella tua app; con l'ultima versione di Eclipse ADT, è necessario inserire l'apphance.jar nella directory 'libs' come [this] (http://stackoverflow.com/a/9916751/9648). SO spiega la risposta. [Questo github commit] (https://github.com/johnnylambada/WorldMap/commit/235ac0461a91a080cca2cdcb7fd2059464165406) mostra le modifiche che dovevo apportare alla mia app WorldMap per utilizzare apphance. – JohnnyLambada
@HohnnyLambada Grazie per il tuo commento. Abbiamo aggiornato la documentazione per renderla più chiara. –
questo non dovrebbe ottenere così tante frecce in su costa 10 volte più della maggior parte dei budget di sviluppo ($ 2.500 al mese!) – user26676
Ecco un'altra soluzione per Crash Log.
mercato Android ha strumento chiamato "Crash Collector"
controllo seguente link per maggiori informazioni
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
Non funziona su Android 4.1 e versioni successive (nuove autorizzazioni per leggere i registri). – cat
È possibile utilizzare ACRA da this. Includendo questa libreria per i tuoi progetti e configurandola, potresti ricevere (nella tua email o gdocs) i loro rapporti sugli arresti anomali. Scusa per il mio cattivo inglese.
Se stai cercando il registro di emergenza mentre il telefono è collegato al computer, utilizza la vista DDMS in Eclipse e il rapporto è proprio lì in LogCat in DDMS quando l'app si arresta in modo anomalo durante il debug.
È inoltre possibile utilizzare libreria crashcatcher
Usa Acra incidente giornalista per Android ..Acra lib
Il modo per farlo è quello di implementare l'interfaccia Thread.UncaughtExceptionHandler
e passarlo al Thread.setDefaultUncaughtExceptionHandler()
all'inizio della vostra attività di onCreate()
. Ecco la classe di implementazione 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);
}
}
Nota Lasciamo che il predefinito del framework AndroidUEH lo gestisca.
Nella parte superiore della tua attività Iscriviti un'istanza della classe sopra in questo modo:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...
Questo gestore salva la traccia in un file. Al successivo riavvio, ReaderScope
, rileva il file e richiede all'utente se desidera inviarlo via email allo sviluppatore.
Per inviare via email la traccia di stack, eseguire il seguente codice per comprimerlo in un messaggio di posta elettronica.
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");
Oppure si può anche utilizzare ACRA Segnalazione errori System.Just Calcola l'ACRA.jar nelle vostre librerie di progetto e utilizzare il frammento di codice sotto prima del vostro launcher dichiarazione di classe di attività
@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT)
La linea non sarà predefinitaUEH.uncaughtException (t, e); chiamare il metodo uncaughtException() infinitamente? –
Questo è da http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html
È possibile utilizzare adb:
adb logcat AndroidRuntime:E *:S
'adb logcat -d CRASH: E *: S *' –
Sì. Ha funzionato: adb logcat AndroidRuntime: E *: S –
Se un Alla ricerca di uno strumento di segnalazione degli arresti di base, prova crashlytics.
Se si desidera uno strumento di reporting più avanzato, Checkout Gryphonet. Registra tutti gli arresti occorsi insieme alla riga esatta di codice che ha causato l'arresto anomalo insieme a marcatori automatici che mostrano i passaggi che l'utente ha intrapreso prima dell'incidente e altro ancora.
Buona fortuna!
Prova l'app di log Carsh da Android.
utilizzare l'link per scaricare l'app.
Ho creato questa libreria per risolvere tutti i tuoi problemi. Crash Reporter is a handy tool to capture all your crashes and log them in device locally
Basta aggiungere questa dipendenza e sei a posto.
compile 'com.balsikandar.android:crashreporter:1.0.1'
Trova localmente tutti i tuoi arresti anomali nel dispositivo e li aggiusta a tuo piacimento. Gli arresti vengono salvati utilizzando il formato di data e ora facile da tracciare. Inoltre, fornisce anche API per l'acquisizione delle eccezioni registrate utilizzando il metodo seguente.
CrashRepoter.logException(Exception e)
Qual è la classe Java che hai usato per ottenere i registri degli arresti anomali di un dispositivo? – Xenolion
Si può provare questo da console: -
adb logcat -b incidente
- 1. Come leggere i registri degli arresti anomali di iOS 4?
- 2. I nuovi itunes collegano i registri degli arresti anomali
- 3. Posso identificare un telefono jailbroken dai registri degli arresti anomali?
- 4. Dove trovare la cronologia degli arresti anomali di Android
- 5. Come posso ottenere i registri degli arresti anomali e le tracce di stack dalle app WinRT scritte in C#?
- 6. Dove posso visualizzare i registri degli arresti anomali per iOS di Google Analytics?
- 7. Registro degli arresti anomali di iPhone?
- 8. Libreria di segnalazione degli arresti anomali Android (pre Froyo)
- 9. iOS: i valori + numerici nei backtrace (nei registri degli arresti anomali)
- 10. Come ottenere il registro degli arresti anomali di iPhone dai clienti?
- 11. Come simbolizzare i registri di arresti anomali inviati dai revisori Apple?
- 12. Google Firebase: come eliminare i rapporti sugli arresti anomali?
- 13. Segnalazione degli arresti di Firebase per iOS non invia arresti anomali nonostante il successo init
- 14. Come controllare il registro degli arresti anomali usando android ndk in cocos2d-x
- 15. Abilitazione simbolizzazione di arresti anomali in Xcode 4.2
- 16. Arresti anomali di Android segnalati in DigitsActivity, DigitsActionBarActivity, FailureActivityDelegateImpl
- 17. Segnalazione di arresti anomali offline in Crashlytics
- 18. Che cos'è com.walkfreestub? (causando arresti anomali su Android)
- 19. Servizio Android con START_STICKY arresti anomali sull'app uccisione
- 20. Come risolvere gli arresti anomali di WebCore in UIWebView?
- 21. TextView.setText (Android) sta causando arresti anomali. Qualche idea sul perché?
- 22. Quali elementi PDF potrebbero causare arresti anomali?
- 23. Riutilizzare UIWebView sta causando arresti anomali
- 24. Come evitare arresti anomali dovuti a voci di stringa mancanti?
- 25. Timeout richiesta asincrona => Arresti anomali IIS
- 26. Come isolare un lavoro/thread dagli arresti anomali
- 27. Come posso risolvere gli arresti anomali di iOS in crashlytics?
- 28. Inclusione di dati personalizzati nei dump degli arresti anomali di iOS
- 29. Come ottenere i registri di altre app?
- 30. Che cosa significa BufferBlob :: Interpreter nel registro degli arresti anomali di JVM?
[biblioteca Android di catturare e segnalare crash] (https://github.com/ajitsing/Sherlock) –