France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 637 membres enregistrés - 1 883 815 posts - 96 197 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Sujets divers
                SegFault sous Linux en C++. Outils de diagnostique?
19 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
1,2 | Suivant
SegFault sous Linux en C++. Outils de diagnostique?

Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 31 mai 2005 - 15 h 20 m 11 s
Bonjour,

En me basant sur la GNU CommonCPP librairie, j'ai fait un programme de daemon reseau "multi-thread". En gros, avec un programme comme Telnet, on peut "discuter" avec lui sur un port spécifique. On peut ouvrir plusieurs sessions en meme temp, chaque thread gerant une connection.
Mon problème est que j'ai de temps en temps un segmentation fault. d'apres le fichier core, c'est la meme classe qui en est la cause mais rarement la meme methode.
Je pense qu'un pointeur deborde de sa zone mémoire allouée mais difficile de savoir lequel.
Existe-t-il des outils sous Linux pour detecter ce genre de probleme?

Merci pour vos réponses



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 097
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 31 mai 2005 - 15 h 25 m 39 s
DDD non ?

Ou n'importe quel debugger en C++ ?

Sinon, il reste le bon vieux printf des familles qui marche assez bien :P (personnellement, je ne jure que par ça :banzai:)

Enfin, un segfault, c'est que généralement, tu es allé tapé dans une zone mémoire non allouée avec ton pointeur...

M'enfin, bonne chance si le phénomène n'est pas récurrent :)

EDIT : Jette un coup d'oeil sur les synchronisations multi-threads... Le bug vient à 90% de là si ce n'est pas la même méthode à chaque fois...


Message édité 1 fois, la dernière par gege38 le 31 mai 2005 - 15 h 26.

" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 31 mai 2005 - 16 h 23 m 58 s
Merci pour ta reponse.



Le 31 mai 2005 - 15 h 25, gege38 a écrit :
DDD non ?

Ben c'est ce que j'ai utilisé jusqu'ici sans succès.


Sinon, il reste le bon vieux printf des familles qui marche assez bien :P (personnellement, je ne jure que par ça :banzai:)

J'ai deja essayé.


Enfin, un segfault, c'est que généralement, tu es allé tapé dans une zone mémoire non allouée avec ton pointeur...

C'est ce que je crois. En fait je cherche plutot un outil orienté vers le monitoring de memoire ou de depassement de pile.


M'enfin, bonne chance si le phénomène n'est pas récurrent :)

C'est le cas, cela peut marcher plusieurs jours sans planté et puis un jour, PAF.



EDIT : Jette un coup d'oeil sur les synchronisations multi-threads... Le bug vient à 90% de là si ce n'est pas la même méthode à chaque fois...

Ouiais, j'ai effectivement corrigé plusieurs problème venant de là mais il me reste tout meme qqs SegFault "aleatoire", isolé et assez rare. Les threads ne partagent plus de données maintenant. C'est pour cela que je penche pour une debordement de pile.
J'ai vu quelque part qu'il existait des outils sous Linux pour monitorer la mémoire ou detecter les fuites de memoires mais impossible de retrouver leurs noms ou meme ou j'ai vu ça... Je pense qu'en les associants à DDD, je pourrai trouver le pointeur responsable.



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 097
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 31 mai 2005 - 17 h 25 m 07 s
Et sinon, as-tu essayé de poser des verrous d'exclusion mutuelle ?

Parce que là, j'ai bien l'impression qu'il doit y avoir 2 threads qui accèdent à une ressource partagée de manière aléatoire et de manière fortuite...

Faudrait voir à nettoyer le code, là, parce que sinon, des SF tu risques de t'en prendre même une fois 100% débuggé (suffit qu'il soit dans une config particulière...)

Pense à bien isoler tes variables :)

EDIT : Ooops, j'avais pas vu que tu disais que tu n'avais plus de ressource partagée...

Bon, donc c'est une zone mémoire qui vient dépasser la taille requise et du coup va émpiéter sur une zone mémoire d'un autre thread...

Huh, ca va être chaud chaud chaud à débugger :hot:


Message édité 1 fois, la dernière par gege38 le 31 mai 2005 - 17 h 27.

" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


Petit_PimoOosE
rsqrtps & pshufb

Messages : 4 617
Inscrit le 15/06/03
Ville : Montréal
Non connecté
  Posté le 31 mai 2005 - 18 h 41 m 59 s
Sous VC++, en mode debug, il y a un mécanisme de détection de dépassement de pile (que je vais décrire selon mon souvenir) : le compilo fait en sorte qu'à chaque appel de fonction, une page de pile supplémentaire est allouée et remplie de données bien précises. En sortie de fonction, ces données sont vérifiées. Si elles sont différentes, il y a eu dépassement, et l'exécution est interrompue.

Peut-être que tu peux adapter ce système à ton code avec des macros en tête et en fin de tes fonctions ?


Message édité 2 fois, la dernière par Petit_PimoOosE le 31 mai 2005 - 18 h 43.

Huile de fraise.

bernie38
Waldorf (le pote à Statler)

Messages : 11 406
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 31 mai 2005 - 20 h 49 m 02 s
sinon, y'a Electric Fence (qui est payant malheureusement), il est réputé très efficace.
Sinon moi je fais comme gégé, printf à tout va. Du fait main, artisanal et rustique, mais efficace avec peu de moyens...



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 01 juin 2005 - 09 h 39 m 23 s


Le 31 mai 2005 - 20 h 49, bernie38 a écrit :
sinon, y'a Electric Fence (qui est payant malheureusement), il est réputé très efficace.

Ben sur ma Fedora il est installé alors je vais l'essayer. Merci de l'info, cela semble prometteur, j'espere que cela va me permettre de regler ce pb. Je ne crois pas qu'il soit payant.


Sinon moi je fais comme gégé, printf à tout va. Du fait main, artisanal et rustique, mais efficace avec peu de moyens...

C'est vrai que cette methode a fait ses preuves quoique dans ce cas précis elle montre ses limites. En effet, le prgm plante rarement au meme endroit bien que dans la meme zone. Le fichier core me dit ou cela plante mais pas QUI est responsable ("mais pas coupable").

Comme dit Gege, ca va etre chaud... Murphy et la loi de l'emmerdement maxi ne font qu'un aujourd'hui... :si:

Merci à tous pour vos remarques en tout cas.



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 01 juin 2005 - 18 h 35 m 03 s

gdb ?




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 01 juin 2005 - 18 h 37 m 51 s


Le 01 juin 2005 - 09 h 39, Gosseyn a écrit :


Le 31 mai 2005 - 20 h 49, bernie38 a écrit :
sinon, y'a Electric Fence (qui est payant malheureusement), il est réputé très efficace.

Ben sur ma Fedora il est installé alors je vais l'essayer. Merci de l'info, cela semble prometteur, j'espere que cela va me permettre de regler ce pb. Je ne crois pas qu'il soit payant.


Il est meme libre .. et fait par un develo Debian :jap:

http://directory.fsf.org/All_Packages_in_Directory/ElectricFence.html

Voir aussi les autres progs suggeres sur cette page :)


Message édité 1 fois, la dernière par iraysyvalo le 01 juin 2005 - 18 h 43.


Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 097
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 01 juin 2005 - 18 h 41 m 01 s


Le 01 juin 2005 - 18 h 35, iraysyvalo a écrit :

gdb ?


Tu m'arrêtes si je me trompe mais il me semble que DDD est une surcouche de GDB non ?



" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 01 juin 2005 - 18 h 44 m 30 s

Oui .. je ne t'arrete pas :)

Disons que j'ai ete eleve a la dure avec gdb :hot:




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


bernie38
Waldorf (le pote à Statler)

Messages : 11 406
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 02 juin 2005 - 13 h 16 m 27 s
et voila un mythe qui disparait ! Moi qui croyais que electric fence était un shareware ! Il est donc free ??? Enfin une bonne nouvelle...



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 08 juin 2005 - 09 h 23 m 24 s
Electric Fence m'a permis d'identifer le probleme rapidement. Pour les SegFault "aleatoires", cest l'outil qu'il vous faut!. ça plante au 1 er debordement de pile. Il suffit alors de regarder le core dump pour savoir ou est l'erreur.

L'utilisation est assez simple puisqu'il faut juste "linker" le programme avec la lib efence. Aucune raison de s'en passer meme s'il n'y a pas de palntage, cela permet d'eviter les surprises lorsque le soft est chez le client.

Je dirais qu'il remplace avantageusement les "printf" dans certains cas. ;-)



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 08 juin 2005 - 13 h 33 m 19 s

Ok :)

Au fait, c'etait quoi l'origine du pb chez toi ?




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 08 juin 2005 - 13 h 40 m 36 s
En fait j'ai trouvé ou il etait mais je ne l'ai pas resolu car ça plante dans la lib. C'est sur un Timer lie à une Socket dans un programme multi-thread.
une fonction getTimer plante en SegFault. Je dois pousser les recherche mais là je suis sur autre chose.



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


bernie38
Waldorf (le pote à Statler)

Messages : 11 406
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 08 juin 2005 - 14 h 05 m 15 s


Le 08 juin 2005 - 13 h 40, Gosseyn a écrit :
En fait j'ai trouvé ou il etait mais je ne l'ai pas resolu car ça plante dans la lib. C'est sur un Timer lie à une Socket dans un programme multi-thread.
une fonction getTimer plante en SegFault. Je dois pousser les recherche mais là je suis sur autre chose.

elle est multi-thread Safe ta fonction getTimer ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 097
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 08 juin 2005 - 14 h 08 m 04 s


Le 08 juin 2005 - 14 h 05, bernie38 a écrit :


Le 08 juin 2005 - 13 h 40, Gosseyn a écrit :
En fait j'ai trouvé ou il etait mais je ne l'ai pas resolu car ça plante dans la lib. C'est sur un Timer lie à une Socket dans un programme multi-thread.
une fonction getTimer plante en SegFault. Je dois pousser les recherche mais là je suis sur autre chose.

elle est multi-thread Safe ta fonction getTimer ?


:plus:



" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


Gosseyn


Messages : 286
Inscrit le 24/01/05
Ville : Grenoble
Non connecté
  Posté le 08 juin 2005 - 17 h 29 m 08 s
Ben j'en sais trop rien car il faudrait lire le source de la lib ( GNU commoncpp) et je n'ai pas pris le temps de jeter un oeil. Je dirais qu'a priori non mais je n'ai aucune certitude.



"Si vous perdez, ne perdez pas la leçon."
Gosseyn


bernie38
Waldorf (le pote à Statler)

Messages : 11 406
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 08 juin 2005 - 17 h 39 m 30 s


Le 08 juin 2005 - 17 h 29, Gosseyn a écrit :
Ben j'en sais trop rien car il faudrait lire le source de la lib ( GNU commoncpp) et je n'ai pas pris le temps de jeter un oeil. Je dirais qu'a priori non mais je n'ai aucune certitude.

ben si elle est pas multithread safe et que tu mets ça dans un prog "multithreadé", attends toi à pas mal de soucis :hot: Ou alors, quand ton appli sera en production, faut changer de poste/de boite pour pas avoir de problème...



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Petit_PimoOosE
rsqrtps & pshufb

Messages : 4 617
Inscrit le 15/06/03
Ville : Montréal
Non connecté
  Posté le 09 juin 2005 - 04 h 47 m 07 s
Avec un petit effort d'encapsulation, ça doit être jouable, non ? Une petite classe qui encadre les éléments critiques et régule les accès par des mutex, et le tour est joué !



Huile de fraise.

1,2 | Suivant
Page genérée en 0.7419 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory