Aller au contenu

Utilisation du debugger sous eclipse (ou autre …)

Généalogie d’un crime

Vous avez en main un cahier des charges tout chaud sorti de l’imprimante, votre mug de café fumant à côté de vous, vous commencez à coder, à coder, coder pour un nouveau projet.

Quelques semaines de travail plus tard, au terme d’une journée de 18h, voire plus, les yeux brillants, vous ajoutez votre dernier point virgule (que vous croyez…) et vous décidez de faire un PREMIER TEST !

… et là, c’est le crash !

Ce n’est rien, vous avez l’habitude ! Vous retroussez vos manches, vous remplissez votre tasse, … et repartez dans un tunnel de deux jours de code, un autre point virgule et un AUTRE TEST !

… tadaa ! crash again !

L’erreur était peut-être plus grave que prévu, las vous décidez de confier la maintenance de ce projet à un.e stagiaire obéissant.e, pour vous plonger avec enthousiasme dans un nouveau projet!!

Il y a plusieurs erreurs dans ce texte…

Bonnes pratiques first

Avant de commencer à chercher et corriger des bugs, le mieux est certainement d’en faire le moins possible, car c’est toujours un travail long et qui peut être difficile de les corriger.

Pour cela, une bonne conception d’abord. Puis de bons cycles de développement, si possible en TDD ou au moins qui prévoient des tests unitaires rapidement.

Ensuite, à l’intérieur du code, appliquer les règles de bonnes pratiques :

// le nom du premier point
Point pointA = new Point(2,3);

pointA.setX(2+sqrt(3)-i^2); // ici, un commentaire serait utile!

Si ces règles sont bien appliquées, il y aura tout de même des bugs !

Première approche, tracker le bug

Exception in thread "main" java.lang.NullPointerException
	at debug.voiture.AgenceLocation.addVoiture(AgenceLocation.java:10)
	at debug.voiture.Essai.executionBug(Essai.java:23)
	at debug.voiture.Essai.main(Essai.java:47)

La première ligne indique le type de l’exeception. Les lignes suivantes sont les appels successifs qui l’ont provoqué, (le dernier appel vient de AgenceLocation, ligne 10)

public void addVoiture(Voiture voiture) {
		System.out.println(voitures); // comme ici
		voitures.add(voiture);
	}

On peut ajouter un affichage à l’endroit où l’erreur se déclenche.

Seconde approche, l’artillerie lourde : le debuggueur

Sous eclipse

Applications

Un repository de Josselin, ancien collègue formateur qui contient un package debug (voiture peut servir pour les exemples) et un package refactor.

Cette partie a été écrite par Josselin.