difference d execution entre mode debug et release [VISUAL C++] - C++ - Programmation
Marsh Posté le 24-09-2002 à 15:35:09
xilebo a écrit a écrit : la structure lvitem est parfaitement initialisée pas de pb a ce niveau la. |
j'en doute. la majorité des problèmes debug / release viennent d'une mauvaise alloc, qui peut être effectuée bien avant et faire planter la chose.
Marsh Posté le 24-09-2002 à 15:36:26
En release il fait des optimisations
essaie de retirer l'optimisation globale, c'est généralement elle qui pose problème.
Dans les Settings du projet, onglet C/C++, category Optimizations
Marsh Posté le 24-09-2002 à 16:01:09
sur www.codeguru.com il y a plein d'infos la dessus; notemment
http://www.codeguru.com/debug/ReleaseMode.shtml
Marsh Posté le 24-09-2002 à 16:34:03
youdontcare a écrit a écrit : j'en doute. la majorité des problèmes debug / release viennent d'une mauvaise alloc, qui peut être effectuée bien avant et faire planter la chose. |
la structure lvitem est allouée de facon statique (c une variable
locale a ma fonction) ...
lorsque je mets une messagebox a un certain endroit dans le code
(en release ) la listview se remplit bien
C est vraiment etonnant. En tout cas je vais essayer ce que vous m'avez proposé... merci .
Marsh Posté le 24-09-2002 à 16:53:22
Citation : un autre vite fait : j'ai un char * dans lequel il y a une date 17/09/2002 par exemple |
Euh... il est bien aloué comme il faut l'espace mémoire sur lequel pointe ton char * ?...
Marsh Posté le 24-09-2002 à 16:54:39
ca sert a rien de se faire iech avec des printf ou messageBox, VC 6 a super tout beau debugger visuel, fo pas se gener pr ss servir ...
Marsh Posté le 24-09-2002 à 18:07:57
Joel F a écrit a écrit : ca sert a rien de se faire iech avec des printf ou messageBox, VC 6 a super tout beau debugger visuel, fo pas se gener pr ss servir ... |
Pour les programmes compilée en mode debug oui.
Marsh Posté le 24-09-2002 à 18:56:47
BB138 a écrit a écrit :
Euh... il est bien aloué comme il faut l'espace mémoire sur lequel pointe ton char * ?... |
etant donné que c est une donnée statique oui .
A ce propos, j'ai enlevé l'optimisation de compilation et du coup ca marche ... mais est ce bien d avoir fait ca ?
Marsh Posté le 25-09-2002 à 11:50:26
Tu as enlevé quoi ?
decoche simplement "Global Optimizations"
Marsh Posté le 25-09-2002 à 14:12:24
Je n'ai pas la solution, désolé mais je tiens tout de même à dire que sur un de mes projets, avec l'optimisation de vitesse en Release, le compilateur retirait purement et simplement une boucle 'for' du code ce qui empêchait le prog de fonctionner (j'ai vérifié avec des printf et des fprint).
Marsh Posté le 25-09-2002 à 14:23:57
zop a écrit a écrit : le compilateur retirait purement et simplement une boucle 'for' du code |
ta boucle faisait référence à des données modifiées par une autre thread ?
Marsh Posté le 25-09-2002 à 14:26:16
zop a écrit a écrit : Je n'ai pas la solution, désolé mais je tiens tout de même à dire que sur un de mes projets, avec l'optimisation de vitesse en Release, le compilateur retirait purement et simplement une boucle 'for' du code ce qui empêchait le prog de fonctionner (j'ai vérifié avec des printf et des fprint). |
L'optimisation globale donne quelques fois des resultats surprenant, en particulier sur du calcul numrique !
resultat correct en debug
divergence en release
Marsh Posté le 25-09-2002 à 18:39:17
youdontcare a écrit a écrit : ta boucle faisait référence à des données modifiées par une autre thread ? |
non, même pas la boucle for était le coeur de la fonction.
Marsh Posté le 26-09-2002 à 02:24:00
zop a écrit a écrit : le compilateur retirait purement et simplement une boucle 'for' du code |
Simple curiosité, j'aimerais voir le code de ce for/fonction.
Marsh Posté le 26-09-2002 à 09:25:13
marrant, pas encore eu de soucis irrecuperable...
Benb, y fait quoi exactement le compilo, quand il fait une optim globale ? (je lit souvent ca mais je sais pas c quoi derriere et cam'enerve )
Marsh Posté le 26-09-2002 à 09:55:11
chrisbk a écrit a écrit : marrant, pas encore eu de soucis irrecuperable... Benb, y fait quoi exactement le compilo, quand il fait une optim globale ? (je lit souvent ca mais je sais pas c quoi derriere et cam'enerve ) |
J'ai pas plus d'infos que ca :
Citation : /Og (Global Optimizations) |
Par experience, j'ai appris a desactiver cette option sur des progs de claculs numériques ou de nombreux algo divergeaient en release, et pas en debug.
Je suis meme allée plus loin, généralement le Pb venait d'une fonction (desaciver cette optim pour cette fonction resolvait le Pb) Généralement cette fonction était courte sans rien de particulier (pas de boucles ni meme d'autres appels de fonctions dedans : que des calculs...)
Marsh Posté le 26-09-2002 à 17:43:41
bon , j'ai trouvé a quoi c etait du (pour la date)...
effectivement c etait une erreur de ma part ... merci quand meme
pour les conseils car ca m a aidé pour d autres problemes.
Marsh Posté le 24-09-2002 à 15:31:21
Salut,
j'ai un gros probleme au niveau d un programme que j'ai fait...
lorsque je l'execute en debug , il fonctionne parfaitement et
des que je le compile en release, j'ai des incoherence dans l execution.
je m'explique :
par exemple j'insere des lignes dans une listview
en procedant de la maniere suivante :
SendMessage(listHwnd,LVM_INSERTITEM,0,(LPARAM)&lvItem) qui me renvoie
l index s il est inseree et -1 sinon
la structure lvitem est parfaitement initialisée pas de pb a ce niveau la.
En debug, l'insertion se fait parfaitement bien (dans mon cas 3 elements)
et les lignes apparaissent.
En release , rien ne se passe, les 3 fois le SendMessage me renvoie 0.
donc comme c est pas -1 pas d erreur mais l'insertion ne se passe pas
et donc les lignes n apparaissent pas.
C est absolument incomprehensible, j'ai tout verifié les structures
sont bien initialisés, mais les messages ne partent pas (pas d erreur pourtant)
Evidemment en mode release on peut pas debugger puisque ... on est en release.
donc pseudo debuggage a coup de messagebox. J affiche toutes mes valeurs en
entree en debug et en release dans des messages box -> aucune difference.
J'ai lancé mon programme en debug et release et j'ai fait un coup
de spy++ sur la list view -> en debug les LVM_INSERTITEM sont bien recu et en
release non.
Voila, dans mon programme il y a plein de bug comme ca (pas forcement au niveau des messages)
un autre vite fait : j'ai un char * dans lequel il y a une date
17/09/2002 par exemple
je fais un sscanf(mystr,"%d/%d/%d",&d,&m,&y) en debug il remplit
bien d = 17, m = 09 , y = 2002 et en release
d = 00 , m = 09 , y = 2002
incroyable ...
Quelqu un connait il ce genre de pb ? car la je ne vois plus quoi faire
merci de vos reponses.