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

21voto

Ani Points 711

Ce popup s'affiche uniquement lorsque vous obtenez une exception fatale dans votre code qui arrête l'exécution de l'application. Il peut s'agir de n'importe quelle exception NullPointerException , OutOfMemoryException etc.

Le meilleur moyen de vérifier est de passer par Logcat si vous êtes toujours en train de développer l'application dans Android studio, ce qui est un moyen rapide de lire la trace de la pile et de vérifier la cause de l'application.

Si votre application est déjà en ligne, vous ne pouvez pas utiliser l'option logcat . Donc, pour cela, vous pouvez mettre en œuvre Crashlytics pour vous fournir des rapports de bogue de toute exception qui se produit.

18voto

Manoj ahirwar Points 834

Vérifiez votre Logcat et voir votre Manifest fichier. Il devrait manquer quelque chose comme la définition de la Activity, Autorisation de l'utilisateur", etc.

15voto

ShivBuyya Points 850

Vous pouvez utiliser n'importe lequel de ces outils :

  1. adb logcat

  2. adb logcat > logs.txt (vous pouvez utiliser des éditeurs pour ouvrir et rechercher les erreurs).

  3. eclipse logcat (Si ce n'est pas visible dans eclipse, allez dans Windows->Show View->Others->Android->LogCat)

  4. Android Debug Monitor ou Android Device Monitor(tapez commande moniteur ou ouvert par l'interface utilisateur)

enter image description here

  1. Android Studio

Je suggère d'utiliser Moniteur de débogage Android c'est bon. Parce que eclipse se bloque lorsque trop de journaux sont là, et par adb logcat filtre et tout difficile.

12voto

alireza amini Points 5

Vous devez vérifier le Stack trace

Comment faire ?

sur votre IDE Vérifiez le formulaire Windows LOGCAT

Si vous ne voyez pas le logcat Windows, allez à ce chemin et ouvrez-le.

window->show view->others->Android->Logcat

si vous utilisez Google-Api, allez à ce chemin

adb logcat > logcat.txt

11voto

Guilherme P Points 2153

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

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