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

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut Code blocks : programme fonction en mode debug et non en release (0 warning) et tourne sur d'autres postes
    Bonjour a tous,

    J'ai un programme qui s’exécute correctement en mode debug et non en release. Petit tour sur les warnings qui sont au nombre de 0.Alors, je me demande si le debug fournit des valeurs au départ en terme de mémoire ou d'initialisation de variable qui lui permette d'aller jusqu'au bout mais je ne trouve rien et magie, mon collègue l'embarque sur son PC et il fonctionne parfaitement bien . Petite précision, j'ai réinstallé code block mais sans plus de réussite.

    Je pense que mon collègue n'a pas changer la configuration initale de code blocks.

    C'est un problème machine?

    Merci

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    As-tu bien activé tous les warnings avec l'équivalent de -Wall -Wextra de gcc ou /W4 de visual studio?

    Quand ca ne fonctionne pas en release, mais en débug, en général, c'est parce que le mode débug initialise scrupuleusement toutes les variables à 0 par défaut.
    C'est notamment le cas des pointeurs.

    Pour résoudre le problème, il n'y a que trois choses à faire:
    • Utiliser un débuggeur pour savoir ce qui pose problème.
    • Réduire les portées des variables
    • Initialiser les variables aussi tôt qu'elles sont déclarées. C'est à dire déclarer les variables uniquement quand on sait les initialiser.


    Ce en quoi, si tu nous disais ce que signifie concrètement ton "ca marche pas", ca serait plus simple d'aider.
    En l'occurence, c'est un crash? des valeurs erronnées, pas de valeurs, un message d'erreur?

    Si ca marche chez ton collègue, c'est a priori qu'il n'a pas exactement la même configuration: une version différente de la bibliothèque standard, du compilateur, des bibliothèques systèmes, de processeur, d'OS, ou que sais-je encore
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,
    ça sent le heisenbug … il «tombe en marche» chez ton collègue et ne fonctionne pas chez toi. À vue de nez je te dirais bien que c'est un accès illégal à une mémoire que tu n'as pas alloué. Chez ton collègue la valeur aléatoire accédée ne fait pas planter, chez toi ça plante.
    En plus des bons conseils de Leternel, tu peux essayer de passer ton programme par Valgrind ou équivalent, utiliser les address sanitizer si tu compiles avec gcc ou clang …

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    oui c'est un crash. Pur et simple.

    Utiliser un debogger est impossible puisque lui fait tout ce que je demande dans mon programme. toutes les variables sont initialisées.

    Est ce que l'allocation mémoire sur un ordinateur peut être différents selon son modèle et par extension un programme sans crash sur un peut devenir un problème sur un autre?

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Picodev; tu entends quoi par il tombe en marche?

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Pourriez vous me donner une solution pour visualiser ce problème de mémoire avec code block sous windows. J'ai fait des recherches mais ce n'est pas très varié pour le débogage mémoire.

    Merci

  7. #7
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    (désolé de te suivre hihi)

    Utilise Dr Memory sur windows !

    Les paramètres à lui donner :
    drmemory.exe -show_reachable c:/dossier/mon_executable.exe param1 param2
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  8. #8
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par nysay27 Voir le message
    Picodev; tu entends quoi par il tombe en marche?
    C'est un coup de chance s'il fonctionne … un peu le contraire de tomber en panne ^^

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Mais merci metalman de me suivre.Tu m'a beaucoup aidé .

    Je vous fait partager mes exploration docteur memory et je veux juste votre point de vue.

    Pour les premières erreurs, c'est un problème d'initialisation de variable.Mais même si j'initialise toute mes valeurs, j'ai quand même un scratch donc next errors.

    Error 4 et 5 : il me dit en gros que les deux malloc ont scratchés.Mais ce que je comprend pas, c'est que il ne me dit pas que j'ai eu une débordement de mémoire (0 bytes beyond last valid byte in prior malloc).Les données traitées par mon fichier étant assez importantes, est ce que il n'y aurait pas une fuite de mémoire, vu que je libère mes tableaux et structures qu'a la fin du programme?
    Images attachées Images attachées    

  10. #10
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Alors ce que j'ai oublié de préciser :

    Compile avec les flags de debug !
    -g -ggdb !

    Même si le programme te semblera fonctionner, il détectera les erreurs ET EN PLUS il t'indiquera la ligne qui fail (<= "il" = Dr Memory*)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Bingo, des "uninitialized read".
    C'est exactement ce que je suggérais

    Il ne reste qu'à être rigoureux.
    Les endroits probables sont:
    • les variables globales
    • les variables déclarées en début de fonction.
    • les pointeurs


    Pour les globales et les déclarations trop tôt, ca va être la plaie à suivre, et c'est la raison même pour laquelle on les déconseille.
    Les pointeurs aussi vont être délicats, mais on a rarement le choix.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Comme ceci metalman?

    La j'avoue que j'ai du mal a me repérer dans la log.
    Images attachées Images attachées  

  13. #13
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Oui l'eternel, il y a des uninitialized read. Nous sommes d'accord que c'est un problème d'initialisation en début de programme des variables qui génère un problème aléatoire au traitement.Mais dans le programme, des valeurs sont attribuées à celle-ci. Il faudrait que ce comportement intervienne avant leurs utilisations?

  14. #14
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Bizarre... dans mon souvenir c'était différent.
    Tu as bien checké que le binaire sur lequel drmemory travaille c'est bien celui en debug avec -g -ggdb ?
    La 3e/4e ligne dit : "WARNING : application is missing line number information"...
    Donc l'exécutable sur lequel tu fais tourner ça n'est pas le bon...
    Fais un clean du projet puis recompile tout (et efface tes .exe avant)

    Mais leternel a raison...
    Il doit aussi manquer des malloc quelque part... (tu as bien compris le fonctionnement des chaînes de caractères avec le '\0 final' vs 'taille exacte de la chaîne' / strlen vs strnlen ?)
    Faudrait que tu balances ton code + la log texte de drmemory (une fois que tu as compilé avec les bons flags)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  15. #15
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    juste pour information, je compile comme ceci :

    mingw32-gcc.exe -Wall -O2 -Wextra -Wall -g -c

    C'est bien ce que tu demande?

  16. #16
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Outch outch outch...

    Alors quand tu travailles, il faut au moins :
    mingw32-gcc.exe -Wall -Wextra -std=c99 -pedantic

    Et quand tu debugges, tu peux ajouter :
    mingw32-gcc.exe -Wall -Wextra -std=c99 -pedantic -g -ggdb

    Et là tu auras toutes les infos nécessaires pour qu'un debuggeur te montres "où" se situe les problèmes
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  17. #17
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Je pense avoir tout bien fait mes toujours 0 warning et pas d'informations en plus sur dr memory.

  18. #18
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Ok... alors d'après la doc DrMemory, il faut générer les infos de debug au format "dwarf2"... (bizarre, la doc gcc dit que -ggdb embarque déjà DWARF2...)
    J'ai peut être oublié le -g3

    Essaye donc tous ces flags :

    -Wall -Wextra -std=c99 -pedantic -g -g3 -ggdb -gdwarf-2
    (et retire le -gdarf-2 si il râle)


    EDIT :
    Si ça ne marche pas, la doc drmemory donne ça :
    -static-libgcc -ggdb -o myapp.exe myfile1.cpp myfile2.cpp

    Et balance la version de ton mingw stp...
    mingwgcc --version ou -v...
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  19. #19
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Points : 71
    Points
    71
    Par défaut
    Je n'ai pu accès a mon environnement de développement .

    je rouvre les hostilités des demain.

    Merci a tous pour votre aide avec dédicace spécial à Métalman.

  20. #20
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Le retour de Metalman !

    Moi je vois ça :

    et je me dis que ce n'est pas la peine d'aller chercher plus loin.

    Pour info : http://www.developpez.net/forums/d12...ows-and-linux/

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Code::Blocks] Erreur fonction résultat
    Par Lastshadow dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 24/01/2012, 21h31
  2. Réponses: 3
    Dernier message: 10/05/2011, 21h01
  3. Réponses: 7
    Dernier message: 28/04/2011, 17h52
  4. Mon code fonctionne en mode debug et pas en release
    Par teddyalbina dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 22/02/2011, 00h16
  5. Réponses: 13
    Dernier message: 22/10/2010, 23h26

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