Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Débuggage avec gdb

  1. #1
    Invité de passage
    Inscrit en
    février 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : février 2004
    Messages : 7
    Points : 0
    Points
    0

    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 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 389
    Points : 2 806
    Points
    2 806

    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
    Rédacteur
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 508
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 508
    Points : 18 096
    Points
    18 096

    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

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •