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

 C++ Discussion :

preprocesseur _debug qu'est ce donc?


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut preprocesseur _debug qu'est ce donc?
    Bonjour,

    Lorsque je tente d'executer un programme c++, il se lance en mode release mais en mode debug j'ai l'erreur de linking suivante:
    error LNK2019: symbole externe non résolu __imp___CrtDbgReportW référencé dans la fonction
    En regardant les differentes configuration entre le mode Release et Debug, il y a une difference au nivau preprocesseur:

    mode release ne contient pas le parametre " _debug" dans c/c++->preprocesseur->definition du preprocesseur

    en enlevant ce parametre dans le mode debug ca compile bien. Mais je ne connais pas tres bien a quoi correspond ce parametre et si c'est judicieux de l'enlever. De plus j'aimerais en savoir un peu plus sur ce parametre. Quelqu'un aurait il une explication ou un tutorial qui me donnerait plus d'infos la dessus?

    Mon programme est ecrit en C++, utilise la SDL et je rencontre ce probleme depuis j'ai defini une map.

    merci pour votre aide

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    en continuant mes recherches je suis tombe sur ca:
    Debug symbol :
    http://en.wikipedia.org/wiki/Debug_symbol

    mais ca reste tres obscur pour moi. Visiblement ce parametre permet d'effectuer un meilleur debugage. Je n'utilise que tres peu le debugage(par meconnaissance). J'ai vu sur le site un tuto qui donnait des infos la dessus. Je l'ai parcouru mais je n'ai pas trouve d'aide a mon probleme.

    J'ai egalement cru comprendre qu'il pouvait y avoir un probleme entre la SDL et le c++. J'ai l'impression que je suis tombe sur un de ces problemes.

    suis je sur la bonne voie?

  3. #3
    Membre averti Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Points : 339
    Points
    339
    Par défaut
    _debug est un symbole défini par ton compilateur lorsque tu compiles en mode debug. Ce symbole n'est pas défini en mode release.

    Cela permet de faire de la compilation conditionnelle et c'est utilisé entre autres par le compilateur microsoft pour définir ou non les macro ASSERT et TRACE. En mode release, ces macros ne font rien.

    Cela permet de faire du code conditionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef _DEBUG
       // on est en mode DEBUG, j'affiche mes variables, et je fais des contrôles supplémentaires
    #else
       // on est en mode RELEASE, je ne fais rien pour des raisons de performances
    #endif
    Attention, cela peut avoir des effets pervers et on peut facilement oublier que le code exécuté en mode release n'est pas tout à fait le même que celui testé en mode debug.
    La valeur n'attend pas le nombre des années

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Les erreurs de symboles non définis ont quasiment toujours la même cause: une bibliothèque externe n'a pas été liées lors de l'édition de liens.

    Un symbole préprocesseur permet, effectivement, d'ajouter (ou de retirer, selon le sens où l'on se place) conditionnellement toute une partie de code, qui peut très bien englobler l'implémentation de toute une fonction.

    Cette fonction peut donc se trouver dans une bibliothèque externe... ou non...

    Il n'est donc pas exclu de se trouver en possession d'une bibliothèque compilée en mode "release" et d'une autre en mode "debug", le nom de cette dernière étant souvent suivi d'un d: une bibliothèque nommée machinChose.lib en version release serait alors souvent nommée machinChosed.lib en mode debug.

    Si tu utilise, de manière directe ou indirecte une de ces fonctions qui n'existe pas dans la version release de la bibliothèque et que, pas de bol, tu as lié ton application avec la version release au lieu de la version debug, l'éditeur de liens est incapable de trouver le symbole correspondant à cette fonction et t'envie gentiment balader avec le message d'erreur que tu indique.

    Ce message t'indique, en outre que le symbole que l'éditeur de liens n'a pas trouvé correspond à la fonction __CrtDbgReportW.

    Je ne serais pas étonné outre mesure si cette fonction se trouvait dans la bibliothèque "runtime" C

    Pour résoudre ce problème, il faut:
    • vérifier la présence d'une version debug correspondant à l'ensemble des bibliothèques utlisées de manière implicite (utilisant les réglages "d'origine" du compilateur) ou explicite (explicitement indiquées dans les options du projet).
    • Si (et "seulement si) tu dispose d'une version debug de ces bibliothèques, indiquer implicitement à l'éditeur de liens qu'il doit utiliser ces versions des différentes bibliothèques

    Si tu ne dispose pas de ces versions debug, tu peux essayer de te les procurer, mais veille à le faire dans le respect de la loi

    Si tu n'arrive pas à te les procurer, je crains qu'il ne te soit jamais possible de compiler une application en mode debug... Mais, comme tu as dit que tu n'utilisait jamais le débugage...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    merci pour toutes ces explications. J'ai appris et compris pas mal de choses en vous lisant meme s'il reste des zones obscure.

    J'ai donc cherche la librairie qui posait probleme et j'ai trouve ca:
    support microsoft
    ou il est dit qu'en Multithreaded DLL (/MD) je dois linker MSVCPRTD.lib a mon application.

    j'ai donc ajoute cette librairie a mon projet et du coup le preprocesseur ne me jette plus


    probleme resolu. encore merci
    ps:si je suis en Multithreaded DLL (/MD) c'est que j'utilise la SDL. Leur faq dit de mettre ce RT.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par zip8000 Voir le message
    merci pour toutes ces explications. J'ai appris et compris pas mal de choses en vous lisant meme s'il reste des zones obscure.
    N'hésite pas à demander des éclaircissements si besoin est
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Qu'est-ce donc que Extlib Enum ?
    Par james-mi dans le forum Caml
    Réponses: 10
    Dernier message: 12/05/2008, 17h57
  2. [D7][DBase 4] Qu'est-ce donc que la propriété Table1.DataBaseName ?
    Par alainvh dans le forum Bases de données
    Réponses: 10
    Dernier message: 19/08/2007, 19h09
  3. [XUL] Qu est ce donc?
    Par luta dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 29/03/2006, 13h14
  4. Réponses: 2
    Dernier message: 06/12/2005, 15h26
  5. Wrapper - Qu'est-ce donc ?
    Par Neitsa dans le forum C++
    Réponses: 3
    Dernier message: 08/09/2004, 23h23

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