Directive de compilation: NDEBUG _DEBUG

Directive de compilation: NDEBUG _DEBUG - C++ - Programmation

Marsh Posté le 27-11-2005 à 12:02:19    

Bonjour à tous,
J'ai un léger soucis de compilation sous VS2003. J'ai le code d'une appli à compiler. En mode debug ca marche très bien, alors que en release l'appli ne semble même pas démarrer. Après désactivation de tous les paramètres d'optimisations du mode release ca ne marchait toujours pas! Bref j'était bien dans le cac  :fou:. Finallement pour revenir au mode debug il ne me restait plus qu'à modifier la variable de précompilation NDEBUG en _DEBUG et la ca marche!
Pour résumer:
         en mode release si la variable NDEBUG est définit l'appli bug
                                si la variable _DEBUG est définit l'appli fonctionne très bien
 
D'où la question à quoi sert ces variables _DEBUG/NDEBUG?
Parce que je suis un peu pommer sur ce point!
 
la seule chose que j'ai pu trouver dans le code c'est:

Code :
  1. #ifdef _DEBUG
  2. #define new DEBUG_NEW
  3. #undef THIS_FILE
  4. static char THIS_FILE[] = __FILE__;
  5. #endif


Ce code est au debut de chaque fichier cpp.
 
Bref si vous avez des info?
 
Merci

Reply

Marsh Posté le 27-11-2005 à 12:02:19   

Reply

Marsh Posté le 28-11-2005 à 09:52:40    

_DEBUG indique que tu travailles sur la version de debuggage de ton programme. Cela active certains outils de debuggage (macros TRACE, etc).
 
NDEBUG indique que tu travailles sur la version d'exploitation (autrement dit la version que tu devrais déployer en clientèle) d'où la désactivation du code de debuggage.
 
Reste que "configuration Debug" et "configuration Release" utilisée dans le jargon Visual ne veut plus rien dire si tu modifies les options de compilation.
 
Pour moi : ça sent la variable non initialisée ou un bug dans le code afférant à la version RELEASE. Regarde ton code placé entre #ifndef _DEBUG ... #endif ou #ifdef NDEBUG (déconseillé mais bon) ... #endif


Message édité par slash33 le 28-11-2005 à 09:55:35
Reply

Marsh Posté le 28-11-2005 à 19:42:05    

Merci pour l'info mais tout ca je le savais.
comme tu peux le voir je n'ai rien mis dans les blocs de précompile... ce qu'il y a est le code généré de manière auto.
Du coup je suis un peu perdu dans tout ce mic mac, car dans le code il n'y a absolument pas de directive de précompilation (je le sais c'est moi qui l'ai fait).
De plus le code original été pour une version de visual studio .NET 2002 importé et converti sous visual studio .NET 2003
Après correction des incompatibilité de code entre les 2 versions sous 2003 ca ne marche absolument pas alors que sous 2002 ca marche impec!

Reply

Sujets relatifs:

Leave a Replay

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