juil
24
2010

[Tutoriel Android]Partie 7 – Débogage

Android et le débogage

Bonjour à tous, nous allons aborder aujourd’hui un tout nouveau chapitre qui traitera du débogage d’application.

Vous avez surement dû rencontrer des erreurs durant les étapes de votre développement et vous rencontrerez encore des écrans appelés “FORCE CLOSE”.

Force Close

Cet écran signifie qu’une erreur s’est produite dans votre code et que l’application ne peut continuer à fonctionner correctement.

Je vais vous montrer quelques manières d’appréhender le problème des F.C, et surtout de corriger les erreurs pour faire des applications stables (c’est la moindre des choses lorsque l’on souhaite la publier sur le market).

Essayons un morceau de code provoquant cette erreur :

public class MonActivite extends Activity {

String maVariable = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// La variable est null donc provoque une exception

maVariable.toString();

}

}

Lorsque que “force close”  s’affiche, nous ne savons pas précisément ce qui a planté ce qui est dommage ! Mais, Eclipse avec le plugin ADT propose une extension nommée DDMS (Dalvik Debug Monitor), qui permet de relever les informations en temps réel des processus lancés sur notre émulateur.

Pour activer cette extension, faites comme ceci :

Afficher DDMS

Si jamais vous n’avez pas l’extension DDMS, allez dans le menu Other pour l’ajouter.

Le menu est également disponible en haut a droite de votre écran dans l’IDE :

Barre Perspective

Barre Perspective

Cliquez sur DDMS et de nouvelles fenêtres vont prendre place pour le monitoring de l’application.

Structure DDMS

Le Premier carré rouge en haut à gauche est le gestionnaire de tâches, vous pouvez voir toutes les tâches lancées dans notre plateforme à l’instant X.

Le deuxième carré permet d’envoyer et de configurer en temps réel notre plateforme (vitesse du réseau, localisation, envoyer un appel, envoyer un sms, …).

Le Troisième carré rouge est le LogCat, il affiche tout ce qu’il se passe sur notre plateforme, agrandissez-le en double cliquant sur LogCat.

Vous allez surement voir différentes couleurs :

Rouge : Erreur

Verte : Information

Jaune : Warning

Erreur

Voici dans les derniers événements une erreur et une grosse en plus, c’est celle de notre application !

Décortiquons-la, cherchons la ligne Caused By qui nous expliquera pourquoi l’application a crashée subitement.

Caused by : java.lang.NullPointerException at com.formation.debogage.MonActivite.onCreate(MonActivite.java:15)

Nous avons appelé une méthode d’un objet de type String contenant NULL, vous vous rappelez ?

Et bien voilà, l’exception levée est le NullPointerException à la ligne 15 du fichier MonActivite.java

Pour corriger cela, il suffirait de faire comme cela :

public class MonActivite extends Activity {

String maVariable = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// on vérifie que maVariable n'est pas null

if(maVariable != null) {

maVariable.toString();

}

}

}

Mais ce n’est pas vrai pour tout malheureusement, certaines fois il faut utiliser les bloc try{…}catch(Exception){…} qui permettront de rendre le code stable.

Pour la même erreur que tout à l’heure nous aurions pu faire :

// on vérifie que maVariable n’est pas null

try {

maVariable.toString();

} catch (NullPointerException e) {

}

Les blocs Try/Catch sont les plus souvent utilisés dans le codage car ils permettent une meilleur gestion des erreurs.

Affichons des données dans le débogueur

Android dispose d’une classe nommée Log, qui permet d’envoyer des informations au débogueur.

Pour afficher une erreur :

Log.e("Nom de l'appli","Mon erreur");

Pour afficher une information :

Log.i("Nom de l'appli","Mon information");

Dans les blocs catch vous pouvez donc mettre

try{

// Mon code à éxécuter

}

catch(Exception e)

{

Log.e("mon erreur",e.getMessages());

}

Ce qui affichera les erreurs dans le DDMS à votre sauce et sans faire planter l’application.

Faire des captures d’écrans de son application

Dans DDMS  est inclue un outil permettant de faire des captures d’écran de son application directement sans utiliser la touche “Imp Ecran” de son clavier.

Capture d'écran

Cliquez sur cette icône, l’écran suivant s’affiche alors :

Capture

Vous pouvez “Sauver”,”Tourner”,”Rafraîchir”,”Copier” l’image.

C’est quand même bien pratique ce petit outil non ?

Voilà, nous sommes arrivés à la fin de ce petit tutoriel sur le débogage de vos applications Android.

Bonne chance à vous et à la prochaine :wink:

Download PDF
  • http://SiteWeb kikizz

    Sympa, merci de prendre le temps de notifier d’aussi petit détail.

  • http://SiteWeb samok

    merci, c’est court mais efficace. En tout cas cela m’a été très utile ne connaissant pas le DDMS j’ai été très agréablement surpris de découvrir enfin un moyen de debugguer mes FC.
    Bonne série de tuto en tout cas,
    bonne continuation…

  • http://SiteWeb fred_andro

    Super sympathique. je ne connaissai pas non plus le DDMS, maintenant… oui. Merci.

  • http://SiteWeb Droide

    Coucou, je suis tes tutoriels et je les dévore depuis le début, continue, sur la lancée, c’est top.

    Pour celui-là, je crois avoir trouvé une petite erreur.

    Dans la dernière partie pour le traitement des exceptions, au lieu de :
    Log.e(“mon erreur”,e.getMessages());

    c’est pas plutôt

    Log.e(“mon erreur”,e.getMessage());

    mais même là, c’est quelque chose d’incorrect que j’obtiens.

    Il faudrait pas plutôt mettre

    Log.e(“mon erreur”,e.toString());

    Merci pour ton boulot qui sert à d’autres

  • http://truth-or-dare.info AndBzh

    Salut,

    Je suis en train de lire ton article, et y’a des choses intéressantes, et d’autres inexactes. Le faite d’utiliser la classe Log ne permet en aucun cas de débuguer ton application. Celà facilite le traçage des erreurs et des parcours / actions utilisateurs, mais c’est à éviter pour debuguer.
    Le debugueur fourni avec Eclipse permet de le faire facilement, mais malheureusement tu n’en parles pas du tout dans ton article.

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    AndBzh, en aucuns cas je dis que la classe Log permet de débogguer le programme.

    Ce sont uniquement des chaines de valeurs qui s’affiche dans le trace log, ce qui permet d’avoir plus de précisions si nous n’avons pas de déboggueur de connecté.

    En suite je traite uniquement de la partie DDMS peut connue mais pourtant bien utile.

    Le déboggueur d’Eclipse ne fait pas qu’Android, elle fait J2EE , Java et j’en passe.

    Je ne traite pas de l’utilisation d’Eclipse sur ce blog, beaucoup d’informations existes au sujet d’Eclipse sur la toile.
    Je ne souhaite que traiter d’Android rien de plus.

    Mais merci pour ta critique

Switch to mobile version