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 :

Macros de debug


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut Macros de debug
    Bonjour,

    Mon but est d'ecrire des macros de debug me permettant de simplifier les appels aux fonctions de trace.

    A force de chercher, j'ai ecrit le code ci-dessous, mais qui ne me convient pas completement : il fonctionne tres bien si j'ai deux parametres d'appel (ou plus), mais pas si j'en ai un seul :

    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
     
    #ifndef FILE_ERROR_H
    #define FILE_ERROR_H
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    #define   TRACE_LEVEL 2
     
    #define WHERESTR  "[file %s, line %d, TrcLvl %d]: "
    #define WHEREARG  __FILE__, __LINE__
    #define DEBUGINTERNAL(...)       fprintf(stderr, __VA_ARGS__)
    #define DEBUGSTR1(fmt, ...)  do { if (TRACE_LEVEL >= 1) { DEBUGINTERNAL(WHERESTR fmt, WHEREARG, 1, __VA_ARGS__); }} while (0)
     
     
    #ifdef _cplusplus
    }
    #endif
     
    #endif
    Exemples d'appel (l'appel commenté est celui qui ne fonctionne pas, et que je voudrais faire fonctionner) :
    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
     
    #include <stdio.h>
     
    #include "file_error.h"
     
     
    int main (void)
    {
     
      int i = 42;
     
      DEBUGSTR1 ("test %d %d\n", i, i);
      DEBUGSTR1 ("test %d\n", i);
    /*   DEBUGSTR1 ("test\n"); */
     
     
      return 0;
    }
    En esperant avoir ete clair dans mes explications, et que vous pourrez m'apporter une reponse
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Salut,

    Cela ne répond peut être pas directement à ta question mais il y a peut être des idées à utiliser : WinLog : une bibliothèque de génération de messages de trace
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define   TRACE_LEVEL 2
     
    #define WHERESTR  "[file %s, line %d, TrcLvl %d]: "
    #define WHEREARG  __FILE__, __LINE__
    #define DEBUGINTERNAL(...)       fprintf(stderr, __VA_ARGS__)
    #define DEBUGSTR1(...)  do { if (TRACE_LEVEL >= 1) { \
                                   DEBUGINTERNAL(WHERESTR, WHEREARG, TRACE_LEVEL);\
                                   DEBUGINTERNAL(__VA_ARGS__);}\
                            } while (0)
    Au lieu de concaténer WHERESTR et fmt pour un seul appel à DEBUGINTERNAL, on fait deux appels à DEBUGINTERNAL sans utiliser fmt.
    Dernière modification par Invité(e) ; 11/05/2010 à 16h45. Motif: mise en forme

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bien vu mabu !

    Effectivement, en faisant 2 appels, ca passe sans problème.

    Merci bien

    Ram-0000 : merci pour le lien, il y a effectivement des idées intéressantes à exploiter.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. [XL-2003] Macro qui marche seulement en mode debug
    Par auberns dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/10/2012, 20h36
  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. macro DEBUG standard ?
    Par mamelouk dans le forum C++
    Réponses: 7
    Dernier message: 24/08/2007, 21h19
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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