Vous êtes sur la page 1sur 2

C Bug Check List mise à jour : 26 mai 2009, Ronan Boulic

Symptômes Détection de la Cause(s) Comment l’éviter


cause
Mes modifications ne J’édite le mauvais fichier Ouvrir une seule fois le
AVANT TOUT Le bug est toujours là
changent rien source fichier dans l’éditeur
Se concentrer sur la Une seule vraie erreur peut
Beaucoup d’erreurs PREMIERE erreur, puis induire une cascade
signalées par le recompiler d’erreurs secondaires
Règles de compilateur
base : Aucune erreur signalée Ajouter l’option de Un warning est une erreur Ne pas ignorer les warning
mais compilation -Wall qui s’ignore
exécution incorrecte
Je ne trouve pas l’erreur Lire la ligne caractère Faute de frappe Options de l’éditeur :
dans la ligne signalée par caractère Couleur, taille, etc..
Chercher dans lignes Oubli de ; ou de parenthèse,
Pré- Pas d’erreur dans la ligne précédentes, y compris ou d’accolade,... INDENTATION
processeur signalée dans les fichiers inclus automatique
Compilation Erreur avant « token ‘=’ » Chercher dans les .h #define avec ‘=’ Syntaxe des directives
Vérifier les fichiers en- Incohérence entre fichiers Le prototype des fonctions
Erreur sur appel de têtes, déclarations, en-têtes, déclarations, doit être décidé au début
fonction définitions, appels définitions, appels puis doit rester stable
Erreur avant * Juste après un type pas un type de base Oubli du typedef du type
défini par l’utilisateur utilisateur
C99 vs C++ Erreur sur type bool Compilateur C99 pas un type de base #include <stdbool.h>
Compilation fichier C++ Fichiers en-tête C vs C++ Le fichier .h d’un module C Vérifier le module associé à
(resp. C++) doit (resp. ne doit chaque fichier .h
pas) être dans extern “ C “
Edition de Faute de frappe d’un Code lisible
liens Undefined symbol Edition de liens nom:variable,fonction Fichier Makefile complet
Undefined reference Oubli, inversion ou Vérifier l’ordre des fichiers
corruption de .o ? lib ? .o et libs
redefinition Edition de liens Si on inclut le .c au lieu du .h Code lisible
Utiliser ddd (trace)
Je ne sais pas où est le Commenter le code Pour toutes les causes Organiser son travail
bug jusqu’à disparition du Faire une « check list »
Règles de bug + Jeu de tests
base : Faire une seule
le bug continue à se modification du code à la Pour toutes les causes Ne pas oublier le \n dans les
manifester fois : recompiler et printf( ) de test
refaire les même tests
(Redirection des entrées Mauvais code printf Vérifier les printf ( )
Le résultat affiché et des sorties) sur jeu de Oubli d’un fichier .h Vérifier les #include
est il correct ? tests, comparer les copier-coller Empêcher les div par 0
sorties avec l’éditeur Mauvaise expression Connaitre le langage C
Pb Mémoire, div. par 0 Cf ci-dessous
Jeux de tests Mauvais accès mémoire : Initialiser et tester les
Segmentation fault ddd :trace, breakpoint.. pointeur ou débordement de pointeurs avant usage
Core dumped Commenter le code pour tableau Tester les bornes des
Exécution localiser le bug Allocation dynamique indices de tableaux
Cascade d’appels Faire un dessin...
Jeu de tests couvrant Analyse incomplète Phase d’analyse
Fonctionnement incorrect toutes les familles de Expressions logiques? Eviter les expressions
cas possibles = au lieu de = = logiques complexes
= ! au lieu de != Faire des if imbriqués
Mauvaise projection
Dessin incorrect ou Jeu de test [min, max] en x, y ? Cf thème OPEN-GL
invisible Noir sur fond noir ?
Swapbuffer ?
Interface GLUI Tester les callbacks avec Gestion fenêtre active Cf manuel GLUI
des printf ( ) Tableau[sizeof(GLUI_String)] main_window correct ?
pour edittext
Verbaliser : décrire oralement les symptômes du problème à quelqu’un d’autre, même si cette personne ne connaît
pas le problème ou le langage utilisé. Formuler des hypothèses avec des phrases du genre : « c’est comme si... ».

Aussi très Faire un dessin : pour tous les cas de segmentation fault impliquant des pointeurs
utile Y réfléchir à deux fois : après tout peut être que l’exécution observée correspond à ce qui était demandé ; il est
important de bien connaitre ses scénarios de tests

Un regard neuf : demander à quelqu’un d’autre de regarder le code ; après 10 minutes sur un morceau de code, on
devient facilement aveugle à ses propres fautes de frappes.

Noter les cas de bugs difficiles dans un carnet (symptômes, cause) : et les relire de temps en temps

Faire une pause : manger, dormir, prendre une douche, faire un tour, etc...