Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2195 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [VC++] {Debug , Release} x {F5 , Ctrl - F5}

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] {Debug , Release} x {F5 , Ctrl - F5}

n°1173724
ahmlot-khm​en
age = 5 ans
Posté le 10-08-2005 à 10:15:13  profilanswer
 

Bonjour,
 
Voici mon problème :
 
Je travaille actuellement sous Visual C++ .NET (je travaille en C++), et il s'avère que mon code a un comportement différent en ( Release ; Ctrl - F5 ) par rapport au reste.
 
Ma question :
 
Quelqu'un aurait-il une connaissance suffisamment approfondie de VC++ ou quelqu'un connaitrait-il un lien qui puisse m'expliquer sous forme simple (un ou deux tableaux) et complète, la différence entre les compilations Debug F5, Debug Ctrl - F5, Release F5 , Release Ctrl - F5 ?
 
Merci d'avance.
 
a.k.
 
---------------------------------------------------------------------------------------------
Résultat
 
F5

  • Interception d'exceptions
  • Gestion des breakpoints

Ctrl - F5
 
Debug

  • Ajoute des 'informations' afin d'aider à debugger

Release

  • Optimisation du code


---------------------------------------------------------------------------------------------
 
Je complèterais ce tableau plus tard, il pourra servir à qqn d'autre que moi  :)  
 
(edit : section résultat)


Message édité par ahmlot-khmen le 08-09-2005 à 14:56:40

---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
mood
Publicité
Posté le 10-08-2005 à 10:15:13  profilanswer
 

n°1173730
theShockWa​ve
I work at a firm named Koslow
Posté le 10-08-2005 à 10:27:32  profilanswer
 

quand tu fais Ctrl+F5, debug ou non, le debugger de Visual Studio ne prend pas la main sur le processus (pour intercepter les exception et placer les breakpoints prévus) alors qu'en mode F5 simple, si ...
 
pour le mode debug, il te rajoute des informations çà et là pour t'aider à debugger et compile sans optimisation par défaut.

n°1173737
ahmlot-khm​en
age = 5 ans
Posté le 10-08-2005 à 10:37:23  profilanswer
 

Citation :

il te rajoute des informations çà et là


 
rien de plus précis ?


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1173775
theShockWa​ve
I work at a firm named Koslow
Posté le 10-08-2005 à 11:13:13  profilanswer
 

ben, non, psa plus précis de mon côté ... Mais normalement, un prog qui passe en debug et qui ne passe pas en release, c'est typiquement un prog qui a un dépassement de capacité ou un pointeur qui part dans le vague ... Et ce sont les infos de debug rajoutée qui te sauvent la vie en mode debug

n°1173779
ahmlot-khm​en
age = 5 ans
Posté le 10-08-2005 à 11:19:48  profilanswer
 

Le problème est que mon code passe en Release F5 et en Debug Ctrl F5 mais pas en Release Ctrl F5. Le pire est que le code compile et run sans problème, mais le résultat est différent de celui fait dans un autre mode.


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1173871
olivthill
Posté le 10-08-2005 à 13:50:36  profilanswer
 

Je suis prêt à parier que c'est un varaible ou un tableau mal initialisé. C'était le cas d'un utilisateur il y a environ un mois sur codeguru (où tu as aussi posté cette question et où je t'avais répondu avant de voir que tu étais ici, où il y a plus de monde).
Montre le code qui pose le problème, et quelqu'un trouvera la cause.

n°1173883
HelloWorld
Salut tout le monde!
Posté le 10-08-2005 à 14:02:44  profilanswer
 

Le fait d'exécuter depuis l'IDE a d'autres impacts, quelque qoit la méthode. J'ai déjà un exe qui plantait si on l'exécutait seul, mais pas depuis VC++, que ce soit release ou debug, F5 ou CTRL+F5. C'était dû à une mauvaise taille d'allocation.
J'en ai déduis que VC++ trappe la CRT qui se comporte différement au niveau des allocs, afin de détecter les problèmes etc...
Y'a le répertoire courant qui change aussi je crois.
En tous cas, de tout ce que j'ai entendu, a chaque fois, le code était en cause.
Pour les infos de débogage, y'en a de plusieurs types.
http://msdn.microsoft.com/library/ [...] pdebug.asp
ça va du pas grand chose juqu'à l'Edit & Continue (modification en live du code compilé).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1173887
zied3
Posté le 10-08-2005 à 14:05:17  profilanswer
 

theShOcKwAvE  a raison, moi j'ai déjà ce problème (en release avec F5 ça marche et ctrl-F5 ça ne marche pas), c'est typiquement un poblème memoire, essaie de voir si tu fais autant new que de delete, de malloc que de free, et vérifie aussi si tu lis sur chaînes que la taille de ta variable est assez grande pour lire les données aussi bien en cas nominal qu'en cas d'erreur.
Mais le mieux c'est que tu situes ton pb (en ajoutant des message box par exemple) et ainsi se  pencher plus érieusement sur la question car tout ça n'est que supposition .

n°1173912
ahmlot-khm​en
age = 5 ans
Posté le 10-08-2005 à 14:39:59  profilanswer
 

Je vais essayer de répondre au mieux, au plus vite :
 

Citation :

essaie de voir si tu fais autant new que de delete, de malloc que de free


Je n'utilise aucun new, ni delete, ni malloc, ni free. Tout se fait tout seul  :p  
 

Citation :

lis sur chaînes que la taille de ta variable est assez grande pour lire les données aussi bien en cas nominal qu'en cas d'erreur


Je ne l'ai pas fait, mais dans ce cas, il doit y avoir des erreurs lors du run time, non ? (Parce que moi, tout se passe bien, c'est juste le résultat qui n'est pas bon).
 

Citation :

en ajoutant des message box par exemple


Pas con. C'est quoi la commande ?
 

Citation :

Y'a le répertoire courant qui change


Comme je le dis ci-dessus, le run time se passe bien, ce n'est donc pas (je pense) un problème de répertoire.
 

Citation :

http://msdn.microsoft.com/library/ [...] pdebug.asp


Je vais y jeter un coup d'oeil.
 

Citation :

varaible ou un tableau mal initialisé


Qu'est-ce que tu entends par mal initialisé ?
 

Citation :

Montre le code qui pose le problème, et quelqu'un trouvera la cause


Il y a un poil trop de code pour être mis sur forum, mais si vous avez des exemples d'initialisation mal faites, je suis prêt  à les lire.


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174090
theShockWa​ve
I work at a firm named Koslow
Posté le 10-08-2005 à 17:13:11  profilanswer
 

si ton code est compact, tu ne veux pas le poster, qu'on t'aide à le corriger ? (j'imagine mal un code énorme qui n'utilise pas d'allocation dynamique)

mood
Publicité
Posté le 10-08-2005 à 17:13:11  profilanswer
 

n°1174144
ahmlot-khm​en
age = 5 ans
Posté le 10-08-2005 à 18:04:55  profilanswer
 

Citation :

si ton code est compact, tu ne veux pas le poster, qu'on t'aide à le corriger ? (j'imagine mal un code énorme qui n'utilise pas d'allocation dynamique)


il gère l'allocation mémoire tout seul (i.e. je n'ai écrit aucun new ou delete dans mon code) et du coup il n'est pas compact  :)


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174151
theShockWa​ve
I work at a firm named Koslow
Posté le 10-08-2005 à 18:10:07  profilanswer
 

ahmlot-khmen a écrit :

il gère l'allocation mémoire tout seul


 
:heink:
 
Edit : technique de pointeurs évolués ? Il y a, logiquement, une partie de ton code qui en fait, non ? :o
Edit 2 : à moins que tu ne laisses tout sur la pile :sweat:


Message édité par theShockWave le 10-08-2005 à 18:12:06
n°1174338
ahmlot-khm​en
age = 5 ans
Posté le 11-08-2005 à 09:43:10  profilanswer
 

lol, je ne connais pas la terminologie exacte, mais je ne fais que lire un fichier svg et mettre les infos contenues dedans dans des containers de la stl.
 
Voici un exemple de code que j'utilise :
 
(Edit : ce code ne m'appartient plus - je l'ai retiré)
 
(ouf,  :sweat: pas pratique l'indentation de MS VC++)
Tout le code n'y est pas, (y'en a pour un paquet de lignes), mais voilà où se trouve le problème.
 
Alors, une idée ?


Message édité par ahmlot-khmen le 08-09-2005 à 14:55:48

---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174356
zied3
Posté le 11-08-2005 à 10:23:17  profilanswer
 

Bon je n'ai pas trop de temps pour saisir tout ton code mais essaie de faire des AfxMessageBox("Step Ok" ) par exemple pour localiser ton pb et après on pourra en parler

n°1174392
ahmlot-khm​en
age = 5 ans
Posté le 11-08-2005 à 10:55:38  profilanswer
 

Je suis dessus avec le pas à pas pour essayer de voir ce qui pourrait poser problème.


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174395
theShockWa​ve
I work at a firm named Koslow
Posté le 11-08-2005 à 10:59:53  profilanswer
 

si tu ne fais pas d'alloc dynamique, es-tu sur de ne pas garder de référence (ou pointeur) sur une variable temporaire ?

n°1174399
ahmlot-khm​en
age = 5 ans
Posté le 11-08-2005 à 11:05:59  profilanswer
 

si les insertions et les push_back de la stl font des copies et ne prennent pas de pointeurs, alors normalement c'est bon.


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174406
theShockWa​ve
I work at a firm named Koslow
Posté le 11-08-2005 à 11:09:07  profilanswer
 

bonjour les perfs, aussi :/ J'espère que tes svg ne sont pas trop gros ...

n°1174446
ahmlot-khm​en
age = 5 ans
Posté le 11-08-2005 à 11:50:23  profilanswer
 

Citation :

bonjour les perfs, aussi :/ J'espère que tes svg ne sont pas trop gros ...


pour l'instant je bosse sur des fichiers de 500ko, mais ça peut aller jusqu'à 5Mo
 
Je suis preneur pour toute optimisation du code (d'ailleurs, si vous avez un lien donnant des méthodes pour optimiser le code je suis preneur).
 
PS : en fait il me fait des modifs sur plusieurs de mes (gros) algos dont un avant (si ça se trouve, j'ai une mauvaise déclaration à un endroit et l'erreur se répercute partout... je continue à chercher)
 
Edit : mais le code est du même style alors si vous voyez des erreurs, n'hésitez pas !!


Message édité par ahmlot-khmen le 11-08-2005 à 11:52:07

---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1174462
theShockWa​ve
I work at a firm named Koslow
Posté le 11-08-2005 à 11:59:49  profilanswer
 

bah, vu que tu demandes (je n'ai pas lu en détail) :
 
* évite les instance temporaires et les recopies inutiles (par exemple : dupliquer des vecteurs de points, ca peut finir par être coûteux, à force)
 
* évite les cast C (du style nLOPIndex += (unsigned int)tmpLop.size())
 
* je m'emmêle dans tes itérateurs quand je cherche à comprendre :D

n°1174473
zied3
Posté le 11-08-2005 à 12:11:24  profilanswer
 

Moi j'ai souvent eu ce problème de release et je l'ai toujours résolu, mais malheureusement je ne travaille pas avec les stream (je deteste ça), c'est presque du chinois pour moi :):)  donc je n arrive pas à comprendre ton code

n°1174503
theShockWa​ve
I work at a firm named Koslow
Posté le 11-08-2005 à 12:36:38  profilanswer
 

zied3 a écrit :

je ne travaille pas avec les stream (je deteste ça), c'est presque du chinois pour moi :):)  donc je n arrive pas à comprendre ton code


je ne vois pas de stream dans son code ...

n°1174532
ahmlot-khm​en
age = 5 ans
Posté le 11-08-2005 à 13:10:01  profilanswer
 

Citation :

* évite les instance temporaires et les recopies inutiles (par exemple : dupliquer des vecteurs de points, ca peut finir par être coûteux, à force)


une ligne de mon code à citer ?
 

Citation :

* évite les cast C (du style nLOPIndex += (unsigned int)tmpLop.size())


tu remplacerais ça par quoi ?
 

Citation :

* je m'emmêle dans tes itérateurs quand je cherche à comprendre :D


C'est parce que la le container est assez compliqué (un multimap<string, vector< vector< pair< float, float> > > >  :p )
 
Edit : pour compléter mon message


Message édité par ahmlot-khmen le 11-08-2005 à 13:12:46

---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1175187
ahmlot-khm​en
age = 5 ans
Posté le 12-08-2005 à 14:02:32  profilanswer
 

J'ai trouvé le problème (enfin), merci beaucoup à vous tous pour votre aide :jap: . C'était effectivement un accès à une case mémoire qui avait été au préallablement effacée :fou:.
Ce que je ne comprends pas, c'est pourquoi alors que ça aurait dû planté en Debug (parce que j'essayais d'accéder à une case mémoire inexistante) ça ne plantait pas, et même pire, ça donnait le bon résultat  :pt1cable:  !!
 
VC++ lis-t'il dans mes pensées les plus profondes pour exaucer mes souhaits ?  ;)  


---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
n°1175210
bjone
Insert booze to continue
Posté le 12-08-2005 à 14:29:44  profilanswer
 

alors c'est marrant, parceque généralement, un accès foireux risque de passer en Release et pas en Debug....
 
tu peux poster le code avant & après correction ? (juste par curiosité)

n°1175379
HelloWorld
Salut tout le monde!
Posté le 12-08-2005 à 17:34:28  profilanswer
 

En Debug il alloue un peu plus que ce que tu demandes.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1175502
bjone
Insert booze to continue
Posté le 12-08-2005 à 22:15:28  profilanswer
 

oué c'est vrai, mais justement il en profite pour poser des marqueurs pour tester les débordements.
 
alors après ptet qu'un débordement en lecture ne poses pas de problèmes...

n°1175510
LeGreg
Posté le 12-08-2005 à 22:30:47  profilanswer
 

Tu as une option dans le dernier VC++ pour vérifier les accès out of bound je crois (principalement pour prévenir les exploits).  
 
Évidemment ça ne marche pas bien avec les structures comme les vectors qui font leur propre allocation dynamique (dans ce cas ces structures devraient inclure elles-meme la verification d'accès out of bound mais ce n'est pas compatible avec la notion d'itérateur). Enfin ça limite le risque d'exploits mais ça n'enlève pas les bugs.
 
Sinon une erreur classique avec les vector c'est de conserver les itérateurs après une insertion/deletion/reallocation. L'itérateur étant un pointeur la plupart du temps, le pointeur devient invalide après une réallocation (Erreur qui n'est pas toujours intercepté parce qu'un pointeur invalide peut pointer vers une zone mémoire valide !).
 
Et surtout ces aides à la programmation ne sont qu'un outil parmi d'autres parce qu'une fois ton programme dans la nature tout peut arriver..

n°1176840
HelloWorld
Salut tout le monde!
Posté le 16-08-2005 à 09:14:23  profilanswer
 

Je crois que l'option dont tu parles n'est applicable que pour la pile (création d'un "cookie" ), pas pour le tas.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1176895
ahmlot-khm​en
age = 5 ans
Posté le 16-08-2005 à 10:32:55  profilanswer
 

Citation :

tu peux poster le code avant & après correction ?


désolé, je n'ai plus la version d'avant
 

Citation :

Sinon une erreur classique avec les vector c'est de conserver les itérateurs après une insertion


Déjà fait  :D  

Citation :


Tu as une option dans le dernier VC++ pour vérifier les accès out of bound je crois (principalement pour prévenir les exploits).  
 
Évidemment ça ne marche pas bien avec les structures comme les vectors


Et aucun moyen de savoir qu'un itérateur sorte du vector ?

Edit :

Au fait, personne ne serait au courant d'un différence de fonctionnement entre Debug et Release lors de l'utilisation de float ?
(lors de calculs ou d'un fprintf(monFILEetoile, "%.2f", 123.45f) )


Message édité par ahmlot-khmen le 16-08-2005 à 13:59:46

---------------
Axiome 1 : j'ai toujours raison ¤ Axiome 2 : si j'ai tort voir l'axiome 1 ¤ Axiome 3 : à prendre avec humour bien évidemment (^_^)
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [VC++] {Debug , Release} x {F5 , Ctrl - F5}

 

Sujets relatifs
Plusieurs instances de debug sous IISstring->const char* pas ok en mode debug
faire appaître un message sur une session fermée (cTRL+alt+suppr)debug c++
Debug Release ?debug assertion failled
Capter la touche CTRL sous Firefox[PB]Eclipse Debug
Besoin d'aide pour débug 
Plus de sujets relatifs à : [VC++] {Debug , Release} x {F5 , Ctrl - F5}


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)