1. #1
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 49
    Points : 53
    Points
    53

    Par défaut la commande "next" semble bégailler

    bonjour,

    en traçant un prog en mode pas à pas avec la commande next, j'ai l'impression que gdb se mélange les pinceaux au niveau des lignes

    par exemple :

    (gdb) n
    105 int acceptClient(int family,int listener, char **from) {
    (gdb)
    109 if( family == AF_INET ) {
    (gdb)
    119 } else if( family == AF_UNIX ) {
    (gdb)
    133 return -1;
    (gdb)
    119 } else if( family == AF_UNIX ) {
    (gdb)
    123 fd = accept(listener, (struct sockaddr*)&unaddr, &len);
    (gdb)
    122 len = sizeof(unaddr);
    (gdb)
    123 fd = accept(listener, (struct sockaddr*)&unaddr, &len);
    (gdb)
    122 len = sizeof(unaddr);
    (gdb)
    123 fd = accept(listener, (struct sockaddr*)&unaddr, &len);
    (gdb)
    124 if( len > sizeof(sa_family_t) ) {

    la 1° commande visible est 'n' (next) suivi de <RETURN> pour répéter la dernière commande, c'est à dire 'next'
    GDB semble "hésiter" entre les lignes 123 et 122
    Il semble passer sur les lignes 123, 122, 123, 122, 123, 124, ...

    Mais pourquoi ces aller retours entre les lignes 122 et 123 ?

    J'avais supposé que les optimisations de gcc ne plaisaient peut être pas à GDB, aussi le prog est compilé avec "-g3 -Od" => mais ça ne change rien.

    Quelqu'un pourrait m'expliquer ce phénomène (qui est un peu pénible ...) ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069

    Par défaut

    Il n'y a pas un for ou un while qui traînerait à la ligne 120 ou 121 ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 49
    Points : 53
    Points
    53

    Par défaut

    ben non
    tout le code est affiché, il n'y a pas de ligne cachée

  4. #4
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 671
    Points : 822
    Points
    822

    Par défaut

    A vue de nez comme ça tu appelles plusieurs fois ta fonction (récursive ?) et donc tu appelles plusieurs fois tes lignes (pas seulement 122 et 123 si tu regardes bien)
    Plus tu pédales moins fort, moins t'avances plus vite.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 49
    Points : 53
    Points
    53

    Par défaut

    ???
    acceptClient() : c'est la fonction dans laquelle je suis
    accept() : c'est les sockets
    donc 2 fonctions qui n'ont rien à voir entre elles et il n'y a pas de récursivité ici

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069

    Par défaut

    Envoie ton programme.

    On n'y voit rien comme ça.

  7. #7
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 560
    Points : 623
    Points
    623

    Par défaut

    Si tu es en optimisé (-Ox), ce genre de comportement est courant... Essaye avec step pour voir si tu as le même genre de problème.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 49
    Points : 53
    Points
    53

    Par défaut

    j'ai essayé en optimisation off => "-O0"
    c'est pareil

    je vais essayer de regarder le code généré par gcc et voir comment il place les n° de ligne pour le debugger

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