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

SL & STL C++ Discussion :

stream de debug


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Par défaut stream de debug
    bonjour, c'est un peut compliquer, et je sais que ça a un rapport avec les iostream, mais n'étant pas professionnel en C++ je me suis pommer avec les modification de ce dernier...
    L'idée c'est d'avoir un Log paramétrable sur plusieurs point. je connais très bien une méthode en C qui le fait (avec les #define et les printf, mais je veut que ce soit en C++ et donc a la méthode des "<<"..

    L'idée c'est d'avoir un systèmes de debug qui soit désactivable a la compilation avec ce style:

    (non d'un namespace)::cout(ou autre) << "mon commentaire" << valeurs << endl;

    éventuellement mettre le stream en couleur dans la console ( C.A.D.: un entête au début et a la fin du stream)

    et par la même occasion pouvoir mettre ces info de debug dans un fichier standard, mais sans les couleurs...

    j'aurais dit que la solution la plus simple à mon niveau serait de refaire une classe ostream mais c'est peut être un peut long et pas utile...

    Merci de votre aide...

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par Heero Yui Voir le message
    j'aurais dit que la solution la plus simple à mon niveau serait de refaire une classe ostream mais c'est peut être un peut long et pas utile...
    Le plus simple pour répondre à tes besoins sera forcément de faire une classe utilisant les stream et qui pourra être paramétrée selon tes différentes contraintes.
    Une première structure pourrait ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class myLog
    {
    public:
       myLog();
       ~myLog();
     
       ExportLog(ostream myLogStream);
       DoLog(const string myLogMessage, const long myLogColor = NULL);
    };
    Tu pourrais contenir dans ta classe toutes les traces si celles-ci sont activées, via un conteneur adapté qui conserverait la ligne de trace, sa couleur et d'autres éventuelles options. A chaque appel à DoLog(), une ligne serait ajoutée dans le container, et à chaque appel à ExportLog(), celui-ci serait sauvegardé dans un fichier tiers.

    Tu peux aussi logger dès le début dans un autre fichier, mettre une couleur par défaut, rajouter la date et l'heure dans chaque ligne de log, ... Tout est possible mais il faut que tu fasses ta propre classe. A moins qu'il en existent déjà qui fassent cela (comme wxLog dans wxWidgets), mais je n'en connaît aucune de tête.

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Par défaut
    Je viens juste de tomber par hasard sur un site qui donne une solution on ne peut plus simple pour le debug, je m'en veux de ne pas y avoir penser...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifdef DEBUG_ENABLED
    #define DEBUG(x) x
    #else
    #define DEBUG(x)
    #endif
     
    // n'importe ou dans le code :
     
    DEBUG((cout << "commentaire de debug ICI" << " autre ... " << endl;))
    Simple efficace et redoutable, et en plus si je veux y mettre de la couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifdef DEBUG_ENABLED
    #define DEBUG(x) cout << "couleur Debug"; x cout << "couleur normal";
    #else
    #define DEBUG(x)
    #endif
     
    // n'importe ou dans le code :
     
    DEBUG((cout << "commentaire de debug ICI" << " autre ... " << endl;))
    Et pour ce qui est du log je pense que le même système peut ètre envisageable avec une sortie sur un fichier ( l'affichage dans la console n'étant la que pour le DEBUG, ce qui nous donnerais quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifdef DEBUG_ENABLED
    #define DEBUG(x) cout << "couleur Debug" << __LINE__ << x << "couleur normal";
    #define LOG_Critical(x) cout << "couleur LOG" << x << "couleur normal";\
                            logfile_stream << x ;
    #else
    #define DEBUG(x)
    #define LOG_Critical(x) logfile_stream << x ;
    #endif
     
    // n'importe ou dans le code : !! ne pas mettre de ;
     
    DEBUG(("commentaire de debug ICI" << " autre ... " << endl))
    LOG_Critical(("commentaire de Log ICI" << endl))

  4. #4
    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
    Tant mieux pour toi si ca te convient...

    Néanmoins... mon expérience du logging est que: c'est quand on a pas compilé avec qu'on en a besoin
    En ce qui me concerne je prefere un switch runtime plutôt qu'un switch compilation... mais c'est un avis personnel.

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Par défaut
    Je suis entièrement d'accord avec toi, mais si je met toutes les options que je met habituellement l'exemple deviendrait assez dure a comprendre...

    De plus j'ai tendence à laisser les Log dans le programme et à les utilisers dans des éléments tel que les chargement (non critique en temps) ou dans la gestion des erreurs (ex ouverture des fichiers) Sinon tout le rest n'est que des info du type debug(***) inutil au programme.

    Les DEBUG sont router vers "cout", et les log vers "clog".

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

Discussions similaires

  1. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  2. Doc sur Debug de Ms-Dos
    Par gtr dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/09/2003, 09h06
  3. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20
  4. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

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