183 votes

Comment obtenir les journaux d’écrasement Android ?

J’ai une application qui n’est pas sur le marché (signé avec un certificat de débogage), mais souhaite obtenir des données de journal d’accident, chaque fois que mon application se bloque. Où puis-je trouver un journal de pourquoi s’est écrasé mon application ?

154voto

Chris Thompson Points 18375

Si votre application est en cours de téléchargement par d'autres personnes et de s'écraser sur des périphériques distants, vous aimeriez peut-être un Androïde rapport d'erreurs de la bibliothèque (référencées dans cette SORTE de post). Si c'est juste sur votre propre appareil, vous pouvez utiliser LogCat. , Même si l'appareil n'est pas connecté à un ordinateur hôte lorsque l'accident s'est produit, la connexion de l'appareil et de l'émission d'un adb logcat commande va télécharger l'intégralité du logcat histoire (au moins dans la mesure où il est mis en mémoire tampon, qui est généralement un loooot de données de journal, c'est juste pas à l'infini). Effectuez l'une de ces options, et de répondre à votre question? Si non pouvez-vous essayer de clarifier ce que vous êtes à la recherche pour un peu plus?

70voto

TanvirChowdhury Points 31

La façon de le faire est de mettre en œuvre le Fil.UncaughtExceptionHandler de l'interface et de les passer au Fil de discussion.setDefaultUncaughtExceptionHandler() au début de votre Activité onCreate(). Ici est la mise en œuvre de la classe 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);
}
}

Remarque Nous laisser le Android du cadre de defaultUEH de le gérer.

En haut de votre Activité à l'inscription d'une instance de la classe ci-dessus comme ceci:

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...

Ce gestionnaire enregistre la trace dans un fichier. Lorsque ReaderScope redémarre la prochaine fois, il détecte le fichier et demande à l'utilisateur si il/elle veut l'envoyer par courriel au développeur.

De e-Mail la Trace de la Pile, exécuter le code suivant à l'emballer dans un 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 appdeveloper@gmail.com: "+
"\n"+
trace+
"\n";

sendIntent.putExtra(Intent.EXTRA_EMAIL,
new String[] {"readerscope@altcanvas.com"});
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");

Ou U peut également utiliser ACRA rapport d'Erreur Système.Il suffit d'Inclure les ACRA.jar dans votre projet, le syndicat et l'utilisation de l'extrait de code ci-dessous avant de votre lanceur de l'activité de la déclaration de classe

@ReportsCrashes(formKey = "", mailTo = "abc@gmail.com;def@yahoo.com", mode = ReportingInteractionMode.SILENT)

9voto

T. Markle Points 667

Si vous utilisez Eclipse, assurez-vous d'utiliser de débogage et de ne pas courir. Assurez-vous que vous êtes dans la perspective debug (en haut à droite) Vous pourriez avoir à frapper 'Resume' (F8) peu de temps pour le journal à imprimer. Le crash sera dans le Logcat fenêtre au bas - double-cliquez pour le plein écran et assurez-vous que vous faites défiler vers le bas. Vous verrez le texte en rouge les erreurs, le crash de trace sera quelque chose comme

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

Les parties importantes de celui-ci sont

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)

ceux qui nous disent que c'était un tableau en dehors des limites de l'exception sur la ligne 13 de main.java dans le onCrate méthode.

8voto

Jarek Potiuk Points 5104

Vous pouvez utiliser http://apphance.com. C'est une croix-plateforme de service (principalement Android, iOS avec d'autres plates-formes sur leur chemin), ce qui permet de déboguer à distance n'importe quel appareil mobile (Android, iOS maintenant - d'autres sont en cours de développement). C'est beaucoup plus que juste une fermeture inopinée, il est en fait beaucoup plus: enregistrement, de déclaration de problèmes par les testeurs, crashlogs. Il faut environ 5 minutes pour s'intégrer. Actuellement, vous pouvez demander l'accès à la bêta fermée.

Avertissement: je suis directeur technique de Polidea, une entreprise derrière Apphance et co-créateur de.

Mise à jour: Apphance n'est plus de la bêta fermée!

8voto

KPBird Points 1652

Voici une autre solution pour Crash Log.

Android market a outil nommé « Crash Collector »

vérifier la lien pour plus d’informations

http://kpbird.blogspot.com/2011/08/Android-application-crash-logs.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X