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 :

débugger une fonction


Sujet :

C

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut débugger une fonction
    Bonjour,

    Je cherche à debugger une fonction (savoir ou elle est appelée dans mon programme)

    voici ce que je fais pour une fonction simple.
    fichier test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define DEBUG_FOO 
    void foo(int a, int b);
    #ifdef DEBUG_FOO
      #define foo(y,z) printf("foo(%i,%i) : file %s, line %i\r\n", y, z, __FILE__, __LINE__); foo(y,z)
    #endif
    fichier test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "test.h"
     
    #ifdef DEBUG_FOO 
      #undef foo
    #endif
    void foo(int a, int b){
      // ...
      // code de la fonction
      // ...
    }
    #ifdef DEBUG_FOO
      #define foo(y,z) printf("foo(%i,%i) : file %s, line %i\r\n", y, z, __FILE__, __LINE__); foo(y,z)
    #endif
    comment faire pour faire la même chose pour une fonction qui renvoie une valeur (il faut que le printf soit appelé avec l'appel de la fonction) ?
    ex:
    merci d'avance

  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
    Dangereux ton #define

    imagine un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(truc == 12)
       foo(12, 12);
    Le code généré après le préprocesseur sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(truc == 12)
       printf("foo(%i,%i) : file %s, line %i\r\n", y, z, __FILE__, __LINE__);
    foo(12, 12);
    c'est à dire pas du tout ce que tu penses.

    Mets au mopins des accolades dans ton define
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef DEBUG_FOO
    #define foo(y,z) { printf("foo(%i,%i) : file %s, line %i\r\n", y, z, __FILE__, __LINE__); foo(y,z); }
    #endif
    Ensuite, pour ton problème de fonctions qui retourne une valeur que tu veux debugger, je ferai un truc comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int dbg_foo(int a, int b, int Line, const char *File)
    {
       int ret = 12;
      // ...
      // code de la fonction
      // ...
     
       printf("foo(%i,%i) returns %d : file %s, line %i\r\n", y, z, ret, File, Line);
     
    }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifndef foo
      #define foo(y,z) dbg_foo(y, z, __FILE__, __LINE__);
    #endif
    Ce qui me gêne le plus dans cette histoire, c'est d'avoir une MACRO "foo" qui ne soit pas en majuscules mais c'est mineur.
    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
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    ok, merci beaucoup, cette solution me convient

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

Discussions similaires

  1. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24
  2. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  3. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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