Comment obtenir Android crash logs?

j'ai une application qui n'est pas sur la place du marché (signée avec un certificat de débogage), mais qui voudrait obtenir des données de journal de crash, chaque fois que mon application plante. Où puis-je trouver un journal de pourquoi mon application s'est écrasé?

127
demandé sur Sheehan Alam 2010-09-04 22:02:23

15 réponses

si votre application est téléchargée par d'autres personnes et s'écrase sur des appareils distants, vous pouvez vouloir regarder dans une bibliothèque de rapports D'erreur Android (référencée dans ce SO post ). Si c'est seulement sur votre propre appareil local, vous pouvez utiliser LogCat. même si l'appareil n'était pas connecté à une machine hôte au moment du crash, la connexion de l'appareil et l'émission d'une commande adb logcat téléchargera toute l'histoire logcat (au moins dans la mesure où il est tamponné qui est généralement un loooot de données de journal, il est tout simplement pas infinie). Est-ce que l'une ou l'autre de ces options répond à votre question? Si ce n'est pas le cas, Pouvez-vous essayer de clarifier ce que vous cherchez un peu plus?

123
répondu Chris Thompson 2017-05-23 11:47:12

la façon de procéder est de mettre en œuvre l'interface Thread.UncaughtExceptionHandler et de la passer à Thread.setDefaultUncaughtExceptionHandler() au début de votre activité onCreate() . Voici la classe d'implémentation 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.

au sommet de votre activité enregistrer une instance de classe supérieure 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.

pour envoyer la trace de la pile, exécutez le code suivant pour 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 vous pouvez également utiliser le système de déclaration des erreurs ACRA.Incluez juste L'ACRA.jar dans vos libs de projet et d'utiliser l'extrait de code ci-dessous avant votre classe d'activité du lanceur déclaration

@ReportsCrashes(formKey = "", mailTo = "abc@gmail.com;def@yahoo.com", mode = ReportingInteractionMode.SILENT)  
40
répondu TanvirChowdhury 2017-03-16 17:06:37

c'est de http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html

vous pouvez utiliser adb:

adb logcat AndroidRuntime:E *:S
24
répondu Kanwar Malik 2015-09-03 00:53:13

vous pouvez essayer cela depuis la console: -

ADB logcat-B crash

15
répondu Ameer ali khan 2017-10-25 12:12:36

vous pouvez utiliser Apphance. Il s'agit d'un service multi-plateforme (désormais principalement Android, iOS avec d'autres plateformes en route) qui permet de déboguer à distance n'importe quel appareil mobile (Android, iOS maintenant - autres en développement). C'est bien plus qu'un crashlog, en fait c'est bien plus: journalisation, rapports de problèmes par testeurs, crashlogs. L'intégration prend environ 5 minutes. Actuellement, vous pouvez demander l'accès à la bêta fermée.

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

mise à jour: Apphance n'est plus fermé bêta! Maj 2: Apphance est disponible dans le cadre de http://applause.com offrande

11
répondu Jarek Potiuk 2016-02-19 17:29:05

si vous utilisez Eclipse, assurez-vous d'utiliser debug et ne pas exécuter. Assurez-vous que vous êtes dans la perspective de débogage (en haut à droite) Vous devrez peut-être cliquer sur "Resume" (F8) à quelques reprises pour que le journal de bord soit imprimé. Le journal de crash sera dans la fenêtre Logcat en bas - double clic pour Plein écran et assurez-vous de faire défiler vers le bas. Vous verrez le texte rouge pour les erreurs, la trace de crash 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.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

les parties importantes pour 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 nous disent que c'était une exception hors limites sur la ligne 13 de main.java dans la méthode onCrate.

7
répondu T. Markle 2010-09-05 01:38:30

Voici une autre solution pour Crash Log.

Android market A outil nommé "Crash Collector"

vérifier le lien suivant pour plus d'information

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

7
répondu Ketan Parmar 2011-08-18 04:45:44

vous pouvez utiliser ACRA de ce . En incluant cette bibliothèque à vos projets et en la configurant, vous pourriez recevoir (dans votre e-mail ou gdocs) leurs rapports de crash. Désolé pour mon mauvais anglais.

4
répondu Jesús Manzano 2012-12-20 15:51:39

si vous cherchez un outil de base pour signaler un accident, essayez crashlytics .

si vous voulez un outil de rapport plus avancé, la commande Gryphonet . Il enregistre tous les crashs qui se sont produits ainsi que la ligne exacte de code qui a causé le crash avec des marqueurs automatiques qui vous montrent les étapes que l'Utilisateur a prises avant le crash et plus encore.

bonne chance!

4
répondu Ariel Bell 2015-10-15 09:33:20

utilisez acra crash reporter pour l'application android.. Acrib

3
répondu Mukesh Y 2013-11-10 17:30:05

Voici une solution qui peut vous aider à vider toutes les logs sur un fichier texte

adb logcat -d > logs.txt
2
répondu JGPhilip 2018-07-26 06:51:04

vous pouvez également utiliser la bibliothèque crashcatcher

1
répondu Nikolay Moskvin 2013-09-11 02:02:01

si vous êtes juste à la recherche du journal de crash pendant que votre téléphone est connecté à l'ordinateur, utilisez la vue DDMS dans Eclipse et le rapport est juste là dans LogCat dans DDMS lorsque votre application plante pendant le débogage.

0
répondu Jonathan Lin 2013-05-28 15:45:38

j'ai créé cette bibliothèque pour résoudre tous vos problèmes. Crash Reporter est un outil pratique pour capturer tous vos accidents et les enregistrer dans le périphérique localement

il suffit d'ajouter cette dépendance et vous êtes prêt à partir.

compile 'com.balsikandar.android:crashreporter:1.0.1'

trouvez tous vos accidents dans l'appareil localement et réparez-les à votre convenance. Les accidents sont enregistrés en utilisant le format date et heure Facile à suivre. De plus, il fournit également L'API pour les Exceptions de capture ci-dessous la méthode.

CrashRepoter.logException(Exception e)
0
répondu Bali 2017-08-05 13:38:52

essayez L'application carsh log d'android.

utilisez le lien pour télécharger app.

-1
répondu prashant thakre 2016-09-13 05:45:18