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 :

macro DEBUG standard ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut macro DEBUG standard ?
    Salut,

    Je me demandais s'il existais une lib plus ou moins répandue qui inclue les habituelles macro de debug. Vous savez, cette macro qui affiche un commentaire en mode debug, mais qui n'est pas inclus au code en mode release.

    Il n'y aurait pas quelquechose comme cela dans la boost? (qqchose de spécifique au c++ avec des cout plutot que des printf)

    Je suis bien tenté de réécrire un truc moi meme, mais s'il y a quelquechose d'évolué qui existe (ne serait qu'un .h), je suis preneur.


    précision : ce n'est pas un bibiolthèque de log (exemple log4cxx) que je cherche. je cherche quelque chose qui ne s'incruste pas au code de la release

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faudrait être plus précis quant à ce que tu cherches. Si ce n'est pas très évolué c'est très facile à coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifndef NDEBUG
    #    define MyFunction(x) /* ce que tu veux */
    #else
    #    define MyFunction(x)
    #endif

  3. #3
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    Disons que je cherche une lib qui permette de faire du logging de messages (dans la sortie standard ou dans un fichier), avec possibilité de passer plusieurs paramètres, et que l'on puisse désactiver complètement (que le code ne soit pas inclus après le post-processing afin d'éviter des tests pour savoir s'il faut afficher ou pas)

    Si en plus elle pouvait etre customizable pour qu'elle puisse ajouter automatiquement par exemple le numéro de la ligne dans lequel le message a été généré, ce serait le top

    si en plus il existe d'autres macro, du type ASSERT ou d'autre que je connais pas ^^ je suis preneur aussi

    edit: en cherchant un peu je suis tombé là dessus, mais ca m'a l'air assez peu standard

    edit2 : zut, quel dommage

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Bien que rejetée, la lib dont tu parles dans ton edit2 est disponible et fonctionnelle. Je l'utilise justement pour logger dans mon code en debug.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    ok c'est intéressant alors. dis moi est ce qu'elle est automatiquement désactivée en mode débug ou est ce que tu dois l'entourer de directives #if DEBUG ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Personnellement j'utilise un truc comme ça dans les tous chtis programmes
    (en général je prefere un vrai systeme de logging).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #ifndef Logging_h_
    #define Logging_h_
     
    #ifdef _cplusplus
    extern "C" {
    #endif
    void logoutput_(const char* msg);
    void logoutputv(const char* msg, va_list vargs);
    void logoutput(const char* msg, ...);
     
    #ifdef _cplusplus
    }
    #endif
     
    #ifdef DEBUG
    #define LOG_DEBUG_(msg)       logoutput_(msg)
    #define LOG_DEBUG(msg,...)     logoutput(msg, __VA__ARGS__)
    #else
    #define LOG_DEBUG_(msg)
    #define LOG_DEBUG(msg,...)     
    #endif
     
     
    #endif
    Le .c (c'est vraiment du C )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include "logging.h"
     
    void logoutput_(const char* msg)
    {
        #ifdef WIN32
        OutputDebugStringA(msg);
        #else
          ....
        #endif
    }
     
    void logoutputv(const char* fmt, va_list vargs)
    {
        // rajouter une allocation dynamique ici si besoin
        char buffer[512];
        sprintfv(buffer,512,fmt,vargs);
        logoutput_(buffer);
    }
     
    void logoutput(const char* fmt, ...)
    {
        va_list  vargs;
        va_start(vargs,fmt);
        logoutputv(vargs);
        va_end(vargs);
    }
    #endif

    Reste plus qu'à mettre des LOG_DEBUG("Un super objet en %08x",myObjectPtr); ou LOG_DEBUG_("Juste un message");

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par mamelouk Voir le message
    ok c'est intéressant alors. dis moi est ce qu'elle est automatiquement désactivée en mode débug ou est ce que tu dois l'entourer de directives #if DEBUG ?
    Euh, l'inverse, non ?
    Et non, je n'ai rein besoin d'ajouter autour pour tout désactiver. En l'occurence, il s'agit vraiment de log de très bas niveau (plus une aide au débug qu'un vrai log de diagnostique), donc je le désactive complètement et statiquement en release, mais pour du log plus normal, je le l'activerais/désactiverais dynamiquement, même en release, selon une configuration du produit. Il est aussi étudié pour avoir un faible coût quand c'est dynamiquement qu'il n'est pas activé.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. [XL-2003] Ajouter un bouton au menu standard avec une macro
    Par loulag07 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/08/2012, 06h47
  2. [XL-2003] Relancer une macro après debug
    Par Edaine dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2011, 15h08
  3. [C++] Macro DEBUG ne marche pas sous Codeclocks
    Par Aspic dans le forum Code::Blocks
    Réponses: 9
    Dernier message: 23/11/2010, 12h24
  4. Macros de debug
    Par gangsoleil dans le forum C
    Réponses: 3
    Dernier message: 11/05/2010, 16h55
  5. [Toutes versions] une macro pour créer un module standard
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2009, 17h42

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