IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Comment bien déboguer son code ?


Sujet :

C

  1. #41
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par bibilolo2 Voir le message
    Pour savoir si l'implémentation du compilateur est conforme au standard AINSI C99, la constante doit être égale à "199901L".
    Toi tu as le livre "C précis et conçis" : je leur ai déjà signalé l'erreur p70 l'auteur parle des macro __STD_HOSTED__ et __STD_VERSION__ alors que c'est __STDC_HOSTED__ et __STDC_VERSION__ , le site signale désormais la seconde erreur http://www.oreilly.fr/archives/C-pkt-errata.txt et je les ai relancé pour la première. Je rappelle le passage de la norme qui explique ces 2 macros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _ _STDC_HOSTED_ _ The integer constant 1 if the implementation is a hosted implementation or the integer constant 0 if it is not.
    _ _STDC_VERSION_ _ The integer constant 199901L.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  2. #42
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut fichiers grof et gdb manquants
    Bonjour à tous,

    J'obtiens avec gcc -g monexe

    a.exe et non pas a.out

    J'obtiens avec gcc -pg monexe
    gprof monexe [ou d'autres tentatives du genre]
    gmon.out: No such file or directory
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  3. #43
    Membre averti
    Homme Profil pro
    DevOps AWS
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : DevOps AWS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Points : 334
    Points
    334
    Par défaut
    Je vais me permettre d'intervenir.

    Je précise que je code en C depuis un an de manière intensive (entre 50 a 90H par semaine) et que j'ai pu faire un tour d'ensemble de ce le C propose .

    Je constate que le sujet parle de comment déboguer pour les débutants , or un bon nombre des messages que vous avez poster restent obscur même pour moi .

    Vous avez oublié que ce qui est évident pour vous ne va pas l'être forcement pour une personne qui va vous lire par la suite .

    Ensuite une bonne habitude à prendre est de faire des fonctions courtes (une trentaine de lignes pas plus), car pour déboguer il est plus simple de se pencher sur une fonction qui est courte est facilement isolable du reste du code.

    Il ne faut pas hésiter à tester de manière séparé les fonctions que vous codez .
    Je développe sous Unix et un bon déboguer dessus serai GDB.

    L'indentation est votre amie (oui oui)

    La coloration syntaxique est aussi très utile, voire indispensable.

    Lire les manuels des fonctions fournis par les bibliothèques.

    Ecrire en protocode (ou pseudo-code) ce que vous devez coder
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fonction => copier une chaine de caracteres
    {
       déclarer les variables;
     
       initialiser les variables;
       etc etc .... 
    }
    Je ne détaille pas mais cela consiste a écrire ce que vous devez faire !

    Penser que vous allez devoir libérer la mémoire alloué avec malloc() !

    Penser aux différentes erreurs qui risquent de survenir ?

    Créer une série de fonctions qui vérifient les valeurs de retour des fonctions système

    J'ai du en oublier très certainement !
    Je les rajouterais par la suite ...

    Si j'ai écrit des choses pas claires pour certains, dites le moi et je me ferais un plaisir de me corriger pour être compris de tous
    Edit => le bouton pour me MP est juste en dessous xD

  4. #44
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    Merci à vous.


    Je peux faire
    int ret;
    ret = strcmp(str,str1);


    Je n'ignorais pas tout ce que vous avez décrit mais ce qui suis me surprend:
    Créer une série de fonctions qui vérifient les valeurs de retour des fonctions système .
    Par exemple?

    Citation Envoyé par J4e8a16n Voir le message
    Bonjour à tous,
    gcc -g -Wextra -Wall -pedantic -std=c99 tst.c
    a.exe et non pas a.out

    J'obtiens avec gcc -pg monexe
    gprof monexe [ou d'autres tentatives du genre]
    J'essaie d'être plus clair:

    >gcc -g -Wextra -Wall -pedantic -std=c99 tst.c produit a.exe et non pas a.out (comme dans C Unleashed par exemple, ou certains tutoriels de C Developpez)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    gdb tst.exe a.exe
    GNU gdb 6.6
    Copyright (C) 2006 Free Software Foundation, Inc.
    (no debugging symbols found)
     
    warning: "C:\cygwin\home\Jean Pierre\tictactoe/a.exe": no core file handler recognize
    s format, using default
    warning: core file may not match specified executable file.
    warning: Couldn't find general-purpose registers in core file.
    warning: Couldn't find general-purpose registers in core file.
    #0  0x00000000 in ?? ()
    (gdb) file a.exe
    warning: core file may not match specified executable file.
    Reading symbols from C:\cygwin\home\Jean Pierre\tictactoe/a.exe...done.
    Si j'utilise la commande file a.exe, gdb trouve les symboles qui s'y trouve.

    ------------------------
    >gcc -pg -Wextra -Wall -pedantic -std=c99 tst.c ne produit aucun fichier pour le profilage.
    >gprof tst.exe
    Si je tente de 'profiler' monexe, gprof se plaint que gmon.out: No such file or directory


    Est-ce tout ce que je peux espérer sous Windows Vista?

    JPD
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  5. #45
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par J4e8a16n
    J'essaie d'être plus clair:

    >gcc -g -Wextra -Wall -pedantic -std=c99 tst.c produit a.exe et non pas a.out (comme dans C Unleashed par exemple, ou certains tutoriels de C Developpez)
    a.out sous *nix et a.exe sous windows.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  6. #46
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Tu ne devrais pas éditer le premier post pour que les solutions soient facile à voir? Parce que là, il faut regarder toute la discussion et ça peut être pénible!

    Tu pourrais soit réécrire au complet dans le premier post ou au moins mettre un lien avec une petite description vers ledit post.

    A+

  7. #47
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Points : 80
    Points
    80
    Par défaut Error/Fault/Failure
    Beaucoup de chose ont dejà été dites , j ajoute juste ma petite contribution, la difference entre les termes : Error/Fault/Failure , Important car aidant a identifier le bug a savoir où chercher .

    Error: Erreure (de pensée) du Programmeur . par exemple confondre les format europeen et americain de la date : dd/mm/yy ou mm/dd/yy , erreures de syntaxe ......

    Fault : C est une erreur survenue (peut etre causer par un Error) dans le System . rend le systeme instable et imprevisible . Par exemple chez le client seulement apres avoir entrer un format incorrect que surviendra le "Fault" dans le systeme , pouvant provoquer l arret, ou un comportement bizare .

    Failure : Erreur permanente dans le system . Survient quand le systeme ne rempli pas correctement et entierement sa tache . Les "Fault" conduise souvent aux "Failure".

    *Solution avant de commencer un Projet :
    - Bien s informer sur les Spec et et les standard , appliqué les recommandation , s impregner theoriquement du domaine dans lequel on va travailler ("Il y a rien de plus pratique qu une bonne theorie"), toujours tenir un cahier de charge.

    Petit bonus : Considerer les Warnings comme des Erreures , essayer de les faires disparaitre , Si ce n est pas possible , bien documenter les Warnings presents dans le Code et expliquer pourquoi ils n ont pas pu etre dissoute .

  8. #48
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2024
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par D[r]eadLock Voir le message
    Suite a la recrudescence de cas problematique, voici le fruit d'une petite reflexion. Si vous avez d'autre choses a ajouter

    Tout d'abord pour debugger un programme, il faut avoir les idees clair deja quant au programme, c'est a dire :
    - qu'est-ce qu'il fait
    - comment il le fait

    et pour aider a cela, rien de tel que du code clair :
    - indentation (on decale le code de quelques espaces apres un if, etc.)
    - commentaire (telle fonction fait ceci, telle variable contient le resultat, etc.)
    - fractionnement des "fonctions" (faire des fonctions generique plutot que d'avoir une fonction de 150 lignes super chiant a debugger)

    Ensuite, pour les erreurs de compilations,
    - compiler avec le maximum de warnings (-Wall pour gcc). Et comprendre ces warnings : un bon programme ne doit avoir aucun warning : un warning est succeptible de causer une erreur.
    - utiliser man (manuel en ligne pour voir la syntaxe des primitives des librairies) (rappel: 'man fprintf' sous linux/unix), ou l'aide en ligne si disponible.
    - reflechir au sens des instructions : pourquoi on fait ceci, cela etc.

    Enfin, quand vous ne voyez pas l'erreur (et c'est comprehensible), afin de simplifier la tache de ceux qui vont vous aider, il faut specifier au maximum les erreurs rencontrees, en donnant:
    - le message d'erreur,
    - l'environement utilise (win/linux, compilo, librairies...)
    - la ligne du code ou se produit cette erreur
    - le code des structures et autres definitions si besoin est (pour montrer les types des donnees utilisees)

    Il n'est pas necessaire :
    - de donner le code complet (sauf si demande expressement)

    Remarque, lorsque du code est donne, il doit l'etre entre les balises [code ] et [/code ]
    Petit complément, non pas pour débugger, mais pour éviter les bugs( pas au niveau syntaxique, mais au niveau du comportement du code). Ecrire du code lisible en évitant les "Undefined Behavior". Prendre pour habitude de lire "les normes du C".

Discussions similaires

  1. [2.x] Comment bien découper son code ?
    Par jacquesndl dans le forum Symfony
    Réponses: 2
    Dernier message: 29/04/2015, 21h17
  2. [VBA][Excel] Comment bien structurer son code?
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2007, 19h39
  3. comment déboguer son code ?
    Par AdHoc dans le forum Zend
    Réponses: 11
    Dernier message: 05/02/2007, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo