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

GDB Discussion :

Débuggage avec gdb


Sujet :

GDB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Débuggage avec gdb
    Bonsoir à tous,

    J'espère que vous avez tous passé de bonnes fêtes de Noël

    Pour ma part, j'ai un souci depuis quelques jours sur un programme C que je n'arrive pas à débugger! J'ai relus 15 fois le code, pas moyen de trouver l'erreur...

    Le programme est question est un programme en C avec des threads, le programme lance 5 threads (gérés avec pthread).

    Mon souci est, que de façon totalement aléatoire j'ai un segmentation default... Je n'ai accès qu'au débugger gdb, voici ce que me sort gdb :
    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 32771 (LWP 15104)]
    0x401f9c7f in strlen () from /lib/libc.so.6
    (gdb) backtrace
    #0 0x401f9c7f in strlen () from /lib/libc.so.6
    #1 0x08049448 in thread_groupe (id_groupe=0xbffe2624) at sourcethread.c:129
    #2 0x40137e51 in pthread_start_thread () from /lib/libpthread.so.0
    #3 0x40137ecf in pthread_start_thread_event () from /lib/libpthread.so.0
    #4 0x4025b8aa in clone () from /lib/libc.so.6
    Gdb me dit qu'il y a un souci avec la fonction strlen, mais il ne me donne aucune ligne précise dans mon code...
    Y a t-il un moyen de connaitre la ligne qui pose problème?
    Et est-ce que cette fonction strlen qui pose problème aléatoirement peut-être située non pas dans mon programme, mais dans une fonction d'une API par exemple (je pense à la fonction mysql_query de l'API mysql)?
    Et aussi comment pourrait planter la fonction strlen? En passant en argument une chaine de caractères sans le \0 ?

    Merci d'avance pour vos réponses,
    Romain

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par aero_climb
    Bonsoir à tous,

    J'espère que vous avez tous passé de bonnes fêtes de Noël

    Pour ma part, j'ai un souci depuis quelques jours sur un programme C que je n'arrive pas à débugger! J'ai relus 15 fois le code, pas moyen de trouver l'erreur...

    Le programme est question est un programme en C avec des threads, le programme lance 5 threads (gérés avec pthread).

    Mon souci est, que de façon totalement aléatoire j'ai un segmentation default... Je n'ai accès qu'au débugger gdb, voici ce que me sort gdb :

    Gdb me dit qu'il y a un souci avec la fonction strlen, mais il ne me donne aucune ligne précise dans mon code...
    Y a t-il un moyen de connaitre la ligne qui pose problème?
    Et est-ce que cette fonction strlen qui pose problème aléatoirement peut-être située non pas dans mon programme, mais dans une fonction d'une API par exemple (je pense à la fonction mysql_query de l'API mysql)?
    Et aussi comment pourrait planter la fonction strlen? En passant en argument une chaine de caractères sans le \0 ?

    Merci d'avance pour vos réponses,
    Romain
    sourcethread.c:129 ce n'est pas dans votre code ?

    strlen peut planter si le paramètre n'est pas une adresse correcte (variable non initialisée, pointeur sur un bloc du heap désalloué…)
    ou si la mémoire pointée ne contient pas de '\0' ce qui peut être dû à une corruption par ailleurs…
    étant donné le contexte multi thread il est à supposer un problème d'accès concurrent à une même zone mémoire…

    en particulier si vous appelez mysql_query dans les threads sans être certain que la librairie mysql ait été compilée avec les options pour être multithread-compatible…

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par aero_climb
    Pour ma part, j'ai un souci depuis quelques jours sur un programme C que je n'arrive pas à débugger! J'ai relus 15 fois le code, pas moyen de trouver l'erreur...
    Grand bien t'en fasse, mais nous, on l'a lu exactement 0 fois, ce qui ne facilite pas le diagnostic...
    Et aussi comment pourrait planter la fonction strlen? En passant en argument une chaine de caractères sans le \0 ?
    Plutôt en lui passant une valeur d'adresse erronée (NULL ou invalide...)
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Probleme pour debuguer avec GDB un projet Qt
    Par phraides dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 07/07/2009, 10h09
  2. PB defunct avec gdb en multithread
    Par gigidu dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 26/05/2008, 16h52
  3. Watchpoint avec GDB sur prog en C++
    Par Davidbrcz dans le forum Linux
    Réponses: 0
    Dernier message: 14/04/2008, 22h51
  4. problème avec gdb
    Par Jérémy Lefevre dans le forum GDB
    Réponses: 2
    Dernier message: 26/03/2007, 10h55
  5. Debug avec GDB
    Par SteelBox dans le forum Linux
    Réponses: 3
    Dernier message: 09/06/2006, 13h26

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