Petits conseils pour déboguer

Petits conseils pour déboguer

par Jean-Cédric Chappelier,
Nombre de réponses : 0

rebonjour.

Comment faire quand on a des erreurs dans son programme que l'on a du mal à trouver ?

Avant tout : testez, testez, testez ! (écrivez des petits tests et avancez pas à pas)

Pour trouver un bug : procédez par dichotomie entre un endroit où vous êtes sûr(e) que c'est juste et entre un endroit où vous êtes sûr(e) que c'est faux.
Pour cette dichotomie : déplacez le point « juste » en restant du coté « juste » ou déplacez le point « faux » en restant du coté faux.
J'insiste sur ces DEUX aspects (combien j'ai vu de gens perdre des heures parce qu'ils se trompaient sur l'un de ces deux aspects, p.ex. parce qu'ils croyaient être à un endroit où c'est déjà faux (= après le bug) alors qu'en fait c'était encore juste (= avant le bug)) :

  1. être sûr(e) que l'on est « du bon coté » (juste ou faux) ;
  2. s'assurer que chacun de ces points de recherche reste du coté correspondant.
En déplaçant ainsi ces points de recherche on arrive forcément au bug.

Maintenant c'est quoi concrètement ces « points de recherche » ?
Lorsque vous saurez utiliser un débogueur (plus tard dans le semestre) ce seront des « breakpoints » du débogueur.
Pour le moment, je pense que pour la très grande majorité d'entre vous ce sont des affichages de messages de debugging. P.ex. :
cout << "DEBUG: ici (step 1) n=" << n << endl;

Laissez moi vous donner trois conseils pour de tels messages (ces conseils vous feront gagner beaucoup de temps dans vos debugging) :

Premier conseil : mettez des endl dans vos messages de debugging.
Deuxième conseil : faites les toujours précéder d'un marqueur unique réservé à ça, p.ex. "### " ou "DEBUG: " ou ce que vous voulez de votre choix.
Troisième conseil : ajoutez toujours un petit texte UNIQUE/DIFFERENT à chaque message (le « step 1 » dans l'exemple ci-dessus).

Le premier conseil permet de ne pas mélanger ces infos avec d'autres messages (p.ex. les vrais messages du programme) et de bien séparer les choses.
Le second conseil permet deux choses : (1) facilement voir ces messages dans l'affichage du programme ; (2) facilement les retrouver après dans son code (fonction « Rechercher » de votre IDE) pour soit les éditer, soit les supprimer.
Le troisième conseil permet de bien savoir où l'on est (quel « point ») : si vous avez plusieurs messages cout << "DEBUG: n=" << n << endl;, vous ne saurez plus lequel est lequel.

Happy debugging!