Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > GDB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/12/2006, 22h02   #1
aero_climb
Invité de passage
 
Inscription : février 2004
Messages : 7
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 7
Points : 0
Points : 0
Envoyer un message via AIM à aero_climb Envoyer un message via MSN à aero_climb
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 :
Citation:
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
aero_climb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 22h47   #2
JeitEmgie
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 375
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 375
Points : 2 891
Points : 2 891
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…
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 23h22   #3
Emmanuel Delahaye
Rédacteur
 
Avatar de Emmanuel Delahaye
 
Inscription : décembre 2003
Messages : 14 505
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2003
Messages : 14 505
Points : 19 321
Points : 19 321
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...
Citation:
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
Emmanuel Delahaye est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h49.


 
 
 
 
Partenaires

Hébergement Web