programme marche en mode normal mais pas en mode debug

programme marche en mode normal mais pas en mode debug - C - Programmation

Marsh Posté le 26-02-2009 à 10:38:42    

Bonjour à tous,
 
Je développe en C sous Visual C++.  
J'ai un problème de taille : lorsque j'exécute mon programme en mode normal, ça fonctionne mais lorsque je passe en mode debug, Visual C++ bloque puis le debugger s'arrête d'un coup.
En général, lorsque ça plante, le debugger ne s'éteint jamais comme ça.
 
Est-ce quelqu'un a déjà eu ce problème ?
 
Merci de votre réponse

Reply

Marsh Posté le 26-02-2009 à 10:38:42   

Reply

Marsh Posté le 26-02-2009 à 11:00:37    

plantage dans de l'allocation dynamique de mémoire, accés à de la mémoire non allouée. Montre du code sinon on pourra rien dire

Reply

Marsh Posté le 26-02-2009 à 11:09:12    

Ça pue l'utilisation d'un pointeur non-initialisé qui "fonctionne" par coup de bol en mode optimisé parce qu'il y a quelque chose dedans qui correspond vaguement à une adresse (de façon aléatoire), mais qui en mode debug est initialisé à 0, donc NULL, donc segfault.

Reply

Marsh Posté le 26-02-2009 à 11:12:18    

Joel F a écrit :

plantage dans de l'allocation dynamique de mémoire, accés à de la mémoire non allouée. Montre du code sinon on pourra rien dire


 
Merci de la réponse.  
En fait, il se trouve que le code du projet est très important. Il est difficile de montrer du code pertinent.
Je voulais savoir s'il y avait des choses à savoir sur la configuration d'un debugger ou si le fait de réinstaller Visual C++ pouvait changer quelque chose.
Mais d'après toi le problème vient du code, donc je vais rectifier ça
 
Merci

Reply

Marsh Posté le 26-02-2009 à 11:16:15    

Elmoricq a écrit :

Ça pue l'utilisation d'un pointeur non-initialisé qui "fonctionne" par coup de bol en mode optimisé parce qu'il y a quelque chose dedans qui correspond vaguement à une adresse (de façon aléatoire), mais qui en mode debug est initialisé à 0, donc NULL, donc segfault.


 
 
Ok. Je ne pensais pas qu'il y avait une différence entre l'exécution en mode debug et celle en mode normal.
Effectivement, le coup du pointeur mal initialisé est plus que probable.
 
Merci pour la réponse
 
 

Reply

Marsh Posté le 26-02-2009 à 11:16:40    

Faut utiliser le debugger jusqu'à l'endroit du plantage et examiner les variables. Du travail de fourmi mais si tu n'as pas d'outils type purify ou insure++ ou autre, il n'y a que comme ça que tu arriveras à tracer le problème.
 
En tout cas, ce n'est pas un problème de compilation ou de debugger, c'est typiquement un souci de gestion mémoire.

Reply

Marsh Posté le 26-02-2009 à 11:17:14    

pseupseu a écrit :

Ok. Je ne pensais pas qu'il y avait une différence entre l'exécution en mode debug et celle en mode normal.
Effectivement, le coup du pointeur mal initialisé est plus que probable.

 

Merci pour la réponse

 

Disons que le mode debug initialise toutes les variables à 0 tout le temps, pour permettre justement de tracer plus facilement l'utilisation de pointeurs non-initialisés. En tout cas si je rencontrais ce problème c'est d'abord de ce côté que je chercherais.

Message cité 1 fois
Message édité par Elmoricq le 26-02-2009 à 11:17:52
Reply

Marsh Posté le 26-02-2009 à 11:28:10    

Elmoricq a écrit :


 
Disons que le mode debug initialise toutes les variables à 0 tout le temps, pour permettre justement de tracer plus facilement l'utilisation de pointeurs non-initialisés. En tout cas si je rencontrais ce problème c'est d'abord de ce côté que je chercherais.


 
 
Bon à savoir  
 
Merci
 
 

Reply

Marsh Posté le 26-02-2009 à 14:22:05    

Bonjour à tous,
 
J'ai eu d'autres éléments de réponse que je me permets de vous communiquer
 
http://www.developpez.net/forums/d [...] ode-debug/
 
En vous remerciant et en vous souhaitant une bonne journée

Reply

Marsh Posté le 05-03-2009 à 12:51:05    

Bonjour à tous,
 
Je me permets de vous donner le fin mot de l'histoire de mon problème.
Il y avait beaucoup de zones mémoire allouées et non initialisées. En mode debug ces zones étaient initialisée à 0xcccccccc alors qu'en mode normal elles étaient initialisées à 0x00000000.
 
Merci et bonne journée  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed