860 votes

Malheureusement, MyApp s'est arrêté. Comment puis-je résoudre ce problème ?

Je suis en train de développer une application, et chaque fois que je l'exécute, j'obtiens le message suivant :

Malheureusement, MyApp s'est arrêté.

Que puis-je faire pour résoudre ce problème ?


À propos de cette question - manifestement inspirée par Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer les erreurs de mon application ? Il y a beaucoup de questions indiquant que l'application s'est arrêtée, sans plus de détails. Cette question a pour but d'apprendre aux programmeurs Android novices comment essayer de résoudre leurs problèmes eux-mêmes, ou de poser les bonnes questions.

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"".

765voto

Niek Haarman Points 13931

Cette réponse décrit le processus de récupération de la trace de la pile. Vous avez déjà la trace de la pile ? Pour en savoir plus sur les traces de la pile, consultez " Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer les erreurs de mon application ? "

Le problème

Votre application a quitté parce qu'une erreur RuntimeException a été jeté.
Le plus courant d'entre eux est le NullPointerException .

Comment le résoudre ?

Chaque fois qu'une application Android (ou toute autre application Java d'ailleurs) se bloque, un fichier Stack trace est écrit dans la console (dans ce cas, logcat). Cette trace de pile contient des informations essentielles pour la résolution de votre problème.

Android Studio

Finding the stack trace in Android Studio

Dans la barre inférieure de la fenêtre, cliquez sur le bouton Logcat bouton. Vous pouvez également appuyer sur alt + 6 . Assurez-vous que votre émulateur ou votre périphérique est sélectionné dans la fenêtre Devices panneau. Ensuite, essayez de trouver la trace de la pile, qui est affichée en rouge. Il se peut qu'il y ait beaucoup de choses enregistrées dans logcat, donc vous devrez peut-être faire défiler un peu. Un moyen facile de trouver la trace de la pile est d'effacer le logcat (en utilisant la corbeille à droite), et de laisser l'application se planter à nouveau.

J'ai trouvé la trace de la pile, que faire maintenant ?

Hourra ! Vous êtes à mi-chemin de la résolution de votre problème.
Il vous suffit de trouver ce qui a fait planter votre application, en analysant la trace de la pile.

Pour en savoir plus sur les traces de la pile, consultez " Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer les erreurs de mon application ? "

Je n'arrive toujours pas à résoudre mon problème !

Si vous avez trouvé votre Exception et la ligne où il s'est produit, et que vous n'arrivez toujours pas à trouver comment le résoudre, n'hésitez pas à poser une question sur StackOverflow.

Essayez d'être aussi concis que possible : postez le suivi de la pile, ainsi que l'adresse de l'utilisateur. pertinent (par exemple, quelques lignes jusqu'à la ligne qui a déclenché l'erreur d'affichage). Exception ).

40 votes

Je sais que ce post est vieux : mais si vous utilisez IntelliJ IDEA, vous pouvez aller dans Android > Devices|Logcat et ajouter un nouveau filtre ( i.imgur.com/145dtkx.png ), et le filtrer pour by Log Message ici vous pouvez mettre FATAL EXCEPTION ( i.imgur.com/HpELhaU.png ). Dans cette boîte, vous pouvez donc lire tout Exceptions qui sont lancés par votre application. Avec cela, vous n'avez pas besoin d'effacer logcat et de refaire le crash. Je pense qu'Android Studio a aussi cette option.

1 votes

Le filtrage de logcat dans Eclipse peut être fait en tapant le nom du paquet java dans le champ du nom de l'application du filtre.

0 votes

Je pense que le point principal est de comprendre la trace de retour que l'on obtient lorsque l'exception se produit. Les FC sont un peu mauvais quand il n'y a pas de trace back ou qu'elle n'est pas utilisable, c'est là que ça devient difficile. Mais je pense que cette explication est une bonne première introduction pour trouver/identifier de tels bugs.

127voto

Vlad Bezden Points 5024

Vous pouvez utiliser L'outil ADB de Google pour obtenir Logcat file pour analyser la question.

adb logcat > logcat.txt

ouvrir logcat.txt et recherchez le nom de votre application. Il devrait y avoir des informations sur la raison de l'échec, le numéro de ligne, le nom de la classe, etc.

41voto

Hiren Vaghela Points 501

Tout d'abord, vous vérifiez à quel moment votre application s'est plantée ( Unfortunately, MyApp has stopped. ). Pour cela, vous pouvez utiliser Log.e("TAG", "Message"); En utilisant cette ligne, vous pouvez voir le journal de votre application dans logcat.

Après cela, vous trouvez le point où votre application s'est arrêtée, c'est très facile à résoudre de votre côté.

31voto

user3848825 Points 89

Il suffit de vérifier l'erreur dans le chat log.

L'option log cat est disponible dans eclipse :

fenêtre->affichage->autres->Android->Logcat

Le chat du journal contient une erreur.

Sinon, vous pouvez également vérifier l'erreur en exécutant une application en mode débogage. Définissez d'abord un point d'arrêt en faisant :

clic droit sur le projet->debug as->application Android

30voto

Ali Bdeir Points 4591

Note : Cette réponse utilise Android Studio 2.2.2.

Note 2 : Je considère que votre appareil est connecté avec succès.


La première chose que vous faites lorsque votre application se plante est de regarder dans le LogCat, en bas d'Android Studio il y a une barre d'outils avec une liste de menus :

image

Cliquez sur le "Android Monitor" (Celui que j'ai souligné dans l'image ci-dessus. ^)

Maintenant, vous obtiendrez quelque chose comme ça :

image

Changement " Verbose " à " Error " Maintenant, il ne vous montrera que les erreurs enregistrées. Ne vous inquiétez pas de toutes ces erreurs (si vous en avez) maintenant.

image

Ok. Maintenant, fais ce que tu as fait pour faire planter ton application. Après que ton application se soit plantée, va dans ton logcat. Tu devrais trouver un nouveau log de crash qui a beaucoup de at:x.x.x : et Caused by: TrumpIsPresidentException par exemple. Allez-y Caused by: dans votre logcat.

image

Suivant que Caused By: il devrait y avoir l'exception qui s'est produite. Dans mon cas, c'est un RuntimeException et en dessous il devrait y avoir une ligne qui contient un lien bleu comme :

image

Si cela Caused by: N'A PAS de ligne avec un texte bleu quelque part en dessous, alors cherchez une autre Caused by: qui le fait.

Cliquez sur le lien bleu . Cela devrait vous conduire à l'endroit où le problème s'est produit. Dans mon cas, il était dû à cette ligne :

throw new RuntimeException();

Donc, maintenant je sais pourquoi il se plante. C'est parce que je lance l'exception moi-même. C'était une erreur évidente .


Cependant, disons que j'ai une autre erreur :

java.lang.NullPointerException

J'ai vérifié mon logcat, j'ai cliqué sur le lien bleu qu'il m'a donné, et il m'a amené ici :

mTextView.setText(myString);

Donc, maintenant je veux déboguer. D'après cette question de StackOverflow une NullPointerException dit que quelque chose est null .

Alors, découvrons qu'est-ce que la nullité . Il y a deux possibilités. Soit mTextView est nulle, ou myString est nulle. Pour le savoir, avant que le mTextView.setText(mString) j'ajoute ces deux lignes :

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

Maintenant, comme nous l'avons fait précédemment (nous avons changé Verose en Error), nous voulons changer "Error" en "Debug". Puisque nous enregistrons en déboguant. Voici toutes les méthodes de journalisation :

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

Donc, puisque nous avons utilisé Log.d nous vérifions dans Debug. C'est pourquoi nous l'avons changé en debug.

Avis Log.d a un premier paramètre, dans notre cas "AppDebug". Cliquez sur le menu déroulant "No Filters" en haut à droite du logcat. Sélectionnez "Edit Filter Configuration", donnez un nom à votre filtre, et dans "Log Tag" mettez "App Debug". Cliquez sur "OK". Maintenant, vous devriez voir deux lignes dans le logcat :

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

Nous savons donc maintenant que mTextView est nul.

J'observe mon code, maintenant je remarque quelque chose.

J'ai private TextView mTextView déclarée première de ma classe. Mais, je ne le définis pas.

En fait, j'ai oublié de le faire dans mon onCreate() :

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

Alors c'est pourquoi mTextView est nulle, parce que j'ai oublié de dire à mon application ce que c'est. Donc j'ajoute cette ligne, je lance mon application, et maintenant l'application ne plante plus.


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