Permettez-moi de vous présenter une analyse de base de Logcat lorsque vous rencontrez une fermeture forcée (lorsque l'application cesse de fonctionner).
DOCS
L'outil de base d'Android pour collecter/analyser les journaux est le logcat.
ICI est la page d'Android sur logcat
Si vous utilisez Android Studio, vous pouvez aussi vérifier ceci LIEN .
Capturer
Fondamentalement, vous pouvez capturer MANUELLEMENT logcat avec la commande suivante (ou simplement vérifier la fenêtre AndroidMonitor dans AndroidStudio) :
adb logcat
Il y a beaucoup de paramètres que vous pouvez ajouter à la commande qui vous aide à filtrer et à afficher le message que vous voulez... C'est personnel... J'utilise toujours la commande ci-dessous pour obtenir l'horodatage du message :
adb logcat -v time
Vous pouvez rediriger la sortie vers un fichier et l'analyser dans un éditeur de texte.
Analyse de
Si votre application se bloque, vous obtiendrez quelque chose comme :
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
Cette partie du journal vous montre beaucoup d'informations :
- Quand le problème est arrivé :
07-09 08:29:13.475
Il est important de vérifier quand le problème s'est produit... Vous pouvez trouver plusieurs erreurs dans un journal... vous devez être sûr que vous vérifiez les bons messages :)
- Quelle application a planté :
com.example.khan.abc
De cette façon, vous savez quelle application s'est écrasée (pour être sûr que vous vérifiez les journaux concernant votre message).
- Quel ERROR :
java.lang.NullPointerException
Une erreur de type NULL Pointer Exception
- Informations détaillées sur l'erreur :
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
Vous avez essayé d'appeler la méthode onBackPressed()
d'un FragmentActivity
objet. Cependant, cet objet était null
quand tu l'as fait.
-
Stack Trace : Stack Trace vous montre l'ordre d'invocation des méthodes... Parfois, l'erreur se produit dans la méthode appelante (et non dans la méthode appelée).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Une erreur s'est produite dans le fichier com.example.khan.abc.AudioFragment.java
à l'intérieur onClick()
à la ligne : 125
(la trace de la pile montre la ligne où l'erreur s'est produite)
Il a été appelé par :
at android.view.View.performClick(View.java:4848)
Qui a été appelé par :
at android.view.View$PerformClick.run(View.java:20262)
qui a été appelé par :
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Vue d'ensemble
Ce n'était qu'un aperçu... Tous les logs ne sont pas simples mais l'erreur donne un problème spécifique et le verbeux montre tous les problèmes ... C'est juste pour partager l'idée et vous fournir des informations de base...
J'espère pouvoir vous aider d'une manière ou d'une autre... Salutations
29 votes
J'ai vu de nombreuses questions être fermées en tant que doublons avec cela. C'est une bonne référence pour aider les gens à poster des données pertinentes dans leurs questions. Cependant, il ne s'agit pas d'une duplication d'un problème fondamental, mais simplement d'une méthodologie permettant de déterrer le problème fondamental. Je pense qu'il serait préférable de fournir le lien vers cette question comme référence et de ne pas la fermer comme doublon.
37 votes
Je pense que la fonction de fermeture est parfaite pour cela. La plupart de ces questions montrent une faible connaissance des compétences de base en matière de débogage. Le fait de les mettre en attente leur donne l'occasion de clarifier leur problème, en utilisant la méthode indiquée dans la réponse. Mieux encore, ils pourraient être en mesure de résoudre le problème eux-mêmes. Cette discussion serait peut-être mieux adaptée à meta.stackoverflow.com.
0 votes
Cette question est trop vague. Une meilleure question serait "en utilisant [myIDE] comment puis-je déboguer une application Android qui affiche l'erreur "Malheureusement, MyApp s'est arrêtée"".
8 votes
@ChrisHalcrow Cette question/réponse ne concerne pas du tout le débogage. Il s'agit de guider les débutants dans Android sur la manière de gérer les plantages d'applications.