Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/05/2009, à 11:33

Eldermê

[Résolu] Valgrind et les 10000 erreurs de fglrx

Bonjour à tous,

Je développe actuellement un petit jeu en 3D, et j'aimerais pourchasser impitoyablement les éventuelles fuites de mémoire qu'il pourrait y avoir. Je me suis donc tournée vers Valgrind, car on m'en a dit le plus grand bien.

L'ennui, c'est que quand je lance Valgrind avec mon application, je me retrouve avec 10000 erreurs venant de fglrx (valeur au-delà de laquelle Valgrind jette l'éponge) rien que dans l'initialisation du contexte OpenGL. Comme mon but est de déboguer mon programme et non pas le driver proprio d'ATI, c'est un peu embêtant.

Le problème vient bien de fglrx car j'ai testé rapidement sur une machine avec une carte nVidia, et les erreurs y restent en nombre raisonnable. Seulement, j'ai besoin de développer sur ma machine à moi, donc avec une carte ATI. Je précise au passage que ma carte graphique n'est pas encore supportée par le driver libre radeonhd, ni le driver libre radeon.

J'ai donc essayé de dire à Valgrind d'ignorer ces erreurs, en passant l'argument de ligne de commande "--gen-suppressions=yes" et en copiant les résultants dans le fichier qui va bien. J'espérais en fait que ces quelques milliers de cafouillages avaient à près la même origine, mais en fait non... Après avoir rajouté une bonne douzaine d'erreurs à ignorer, il y avait toujours 10000 erreurs (certes les premières n'étaient pas les mêmes, mais ça ne m'a pas vraiment donné l'impression d'avancer). J'en ai donc déduit qu'avec cette méthode, j'allais y passer la (voire plusieurs) nuit.

D'où ma question : y a-t-il moyen de dire à Valgrind d'ignorer absolument toutes les erreurs venant de fglrx (sans avoir à les enlever une par une) ? Ou, sinon, avez-vous une autre solution ? (nan, changer de carte graphique n'est pas une réponse valable wink )

PS : si vous connaissez une solution avec un autre outil que Valgrind, ça me va très bien aussi

Dernière modification par Eldermê (Le 20/07/2009, à 11:35)


Mon blog : petit projet de jeux en 3D (libres, bien sûr).

Hors ligne

#2 Le 14/05/2009, à 11:55

Grunt

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Je suppose qu'envoyer valgrind avec un tuto pour apprendre à s'en servir à AMD/Ati n'est pas non plus une réponse valable? tongue

Tu peux essayer (solution punk) de débugger ton logiciel avec le rendu "mesa", c'est l'accélération 3D logicielle. ça sera inutilisable de façon pratique, mais pour traquer les bugs ça devrait aller.

#3 Le 14/05/2009, à 12:43

valAa

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Salut,

as-tu regardé du côté de l'option --suppressions=<filename> ? un exemple de fichier est à /usr/lib/valgrind/default.supp

Sinon là comme ça, à l'arrache, je dirais :
- désactiver la limite d'erreur ( --error-limit=no)
- virer les lignes en filtrant directement la sortie (stderr il me semble), ou en filtrant un fichier vers lequel la sortie de valgrind aura été redirigée à coup de regexp.
Après je sais pas si c'est faisable, il risque d'y avoir beaucoup de lignes à filtrer...

Enfin, peut-être des pistes....

Hors ligne

#4 Le 14/05/2009, à 13:45

Eldermê

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Grand_Grunt a écrit :

Je suppose qu'envoyer valgrind avec un tuto pour apprendre à s'en servir à AMD/Ati n'est pas non plus une réponse valable? tongue

Sur le principe, c'est assurément une réponse très valable wink Il faut quand même reconnaître qu'un driver qui fait cracher plus de 10000 erreurs à Valgrind, ça fait un peu désordre (quelque que soit l'appli en 3D, d'ailleurs. J'ai aussi essayé avec glxgears et avec Extreme Tux Racer pour voir). D'un point de vue plus pragmatique, je doute que ce soit très efficace par contre.

Grand_Grunt a écrit :

Tu peux essayer (solution punk) de débugger ton logiciel avec le rendu "mesa", c'est l'accélération 3D logicielle. ça sera inutilisable de façon pratique, mais pour traquer les bugs ça devrait aller.

Je vais regarder ce que ça donne ce soir. Mais j'ai peur que cela ne me convienne pas. Pour la lenteur, de toute façon Valgrind dégrade violemment les performances (genre on se retrouve à 4 fps au lieu de 400), donc à mon avis, ce n'est pas le fait d'être en rendu matériel ou logiciel qui va y changer grand chose.
Ce qui risque de poser problème, c'est qu'il me semble que le rendu "mesa" ne permet pas d'utiliser les shaders, et j'en ai mis dans mon jeu. J'ai aussi prévu un mode de rendu sans shader mais si je ne débogue que ça, ce sera incomplet et je pourrais laisser passer des erreurs dans les méthodes qui s'occupent du rendu en activant les shaders.


valAa a écrit :

as-tu regardé du côté de l'option --suppressions=<filename> ? un exemple de fichier est à /usr/lib/valgrind/default.supp

Oui, c'est ce que j'ai utilisé en fait. Le soucis, c'est que d'après ce que j'ai compris, il faut lister les erreurs une à une. A moins qu'il existe une syntaxe un peu générique que je ne connais pas et qui me permettrais de virer tout plein d'erreurs d'un coup, ça va me prendre un temps fou pour récupérer toutes les erreurs et les mettre dans le fichier.

valAa a écrit :

Sinon là comme ça, à l'arrache, je dirais :
- désactiver la limite d'erreur ( --error-limit=no)
- virer les lignes en filtrant directement la sortie (stderr il me semble), ou en filtrant un fichier vers lequel la sortie de valgrind aura été redirigée à coup de regexp.
Après je sais pas si c'est faisable, il risque d'y avoir beaucoup de lignes à filtrer...

Ca va pas être simple, vu la tête des messages d'erreurs qui sortent de Valgrind : une erreur prend plusieurs lignes, donc il faudrait arriver à bien enlever toutes les lignes, pas évident je pense. Et puis mes compétences en bash sont très faibles. Je peux apprendre, bien sûr, mais je préfèrerais passer du temps sur mon application elle-même.

Merci pour vos réponses en tout cas.


Mon blog : petit projet de jeux en 3D (libres, bien sûr).

Hors ligne

#5 Le 14/05/2009, à 13:47

Grunt

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Sinon, tout bêtement: tu n'as pas accès à une machine qui dispose d'un chipset graphique Intel? Ils ont des pilotes libres peaufinés au millipoil wink

#6 Le 14/05/2009, à 14:04

Eldermê

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Grand_Grunt a écrit :

Sinon, tout bêtement: tu n'as pas accès à une machine qui dispose d'un chipset graphique Intel? Ils ont des pilotes libres peaufinés au millipoil wink

Hélas non.

Cela dit, j'ai accès à la machine de mon copain qui a une carte nVidia. Le pilote nVidia n'est pas parfait du point de vue de Valgrind, mais de mémoire il me semble que c'est plus de l'ordre de la dizaine d'erreurs, donc ça ne noie pas les erreurs qui m'intéressent. Ca reste donc une solution, s'il n'y a pas moyen de m'en sortir en restant sur ma machine (ce qui m'irait quand même beaucoup mieux).


Mon blog : petit projet de jeux en 3D (libres, bien sûr).

Hors ligne

#7 Le 14/05/2009, à 14:23

Grunt

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Tu peux lui demander un accès SSH big_smile

#8 Le 14/05/2009, à 18:28

grim7reaper

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Eldermê a écrit :

Ca va pas être simple, vu la tête des messages d'erreurs qui sortent de Valgrind : une erreur prend plusieurs lignes, donc il faudrait arriver à bien enlever toutes les lignes, pas évident je pense. Et puis mes compétences en bash sont très faibles. Je peux apprendre, bien sûr, mais je préfèrerais passer du temps sur mon application elle-même.

Si tu veux je peux toujours essayer de te coder un script qui filtrera les erreurs.
Je ne te promets rien, il faudrait déjà que je vois la tête des erreurs (je n'ai pas utilisé Valgrind depuis un petit moment) mais je pense que ça doit être réalisable en Perl.
Si tu es intéressé fais-le moi savoir smile.

Sinon en dehors de Valgrind je ne connais pas d'autres outils et je n'ai pas de meilleures idées que ce qui à déjà été proposé pour ignorer les erreurs.

Hors ligne

#9 Le 14/05/2009, à 19:08

Eldermê

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Alors, j'ai essayé avec un rendu logiciel et malheureusement c'est pas top. Déjà, c'est vraiment super lent. Dans certaines situations, je tombe en dessous d'1fps, ce qui est vraiment très désagréable, même pour déboguer (il faut bien que je fasse quelques actions pour tester si le comportement est correct et si la mémoire se libère bien). Bon, ça à la limite, c'est pas non plus très grave dans la mesure où je pourrais coder vite fait une petite fonction qui automatise diverses actions, et aller boire un café pendant que ça mouline... wink Le gros point négatif dans mon cas, c'est qu'avec du rendu logiciel, je ne peux pas utiliser les shaders GLSL, donc il y a tout plein de bouts de codes que je ne pourrai pas tester.

grim7reaper a écrit :

Si tu veux je peux toujours essayer de te coder un script qui filtrera les erreurs.
Je ne te promets rien, il faudrait déjà que je vois la tête des erreurs (je n'ai pas utilisé Valgrind depuis un petit moment) mais je pense que ça doit être réalisable en Perl.
Si tu es intéressé fais-le moi savoir.

Ce serait vraiment sympa de ta part, mais je ne voudrais pas que t'embêter.
En fait, les erreurs ont à peu près toutes la même têtes, donc c'est peut-être pas si compliqué, je ne sais pas trop. La manipulation de chaînes de caractères est loin d'être mon domaine de prédilection.
Voici quelques erreurs (je n'ai pas tout mis...) :

==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C2326D: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9601A53: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9646D97: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf04e is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23277: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9601A53: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9646D97: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf04d is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23281: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9601A53: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9646D97: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf04c is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23264: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96471C5: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1a7 is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C2326D: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96471C5: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1a6 is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23277: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96471C5: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1a5 is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23281: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96471C5: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1a4 is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23264: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x964770B: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1bf is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C2326D: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x964770B: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1be is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23277: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x964770B: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1bd is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23281: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x964770B: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1bc is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23264: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9647C25: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1ff is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C2326D: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9D323B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9600B9F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9647C25: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC922: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9865A2D: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9ED62EE: __driCreateNewScreen_20050727 (in /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x4059A29: (within /usr/lib/libGL.so.1.2)
==4652==    by 0x4055485: glXChooseVisual (in /usr/lib/libGL.so.1.2)
==4652==  Address 0x7ff815fdf1fe is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== More than 100 errors detected.  Subsequent errors
==4652== will still be recorded, but in less detail than before.
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C23264: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9F26BB3: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9F29B87: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D5DEA9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D0BAF7: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D567BF: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D23D97: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96219B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC94F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==  Address 0x7ff81637d547 is not stack'd, malloc'd or (recently) free'd
==4652== 
==4652== Invalid write of size 1
==4652==    at 0x4C2326D: memcpy (mc_replace_strmem.c:402)
==4652==    by 0x9F26BB3: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9F29B87: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D5DEA9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D0BAF7: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D567BF: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x9D23D97: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x96219B9: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x95DC94F: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x91A5DF0: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98491EE: (within /usr/lib/dri/fglrx_dri.so)
==4652==    by 0x98656B8: (within /usr/lib/dri/fglrx_dri.so)
==4652==  Address 0x7ff81637d546 is not stack'd, malloc'd or (recently) free'd
==4652==

Le "4652" correspond au numéro de processus, si j'ai bien compris, donc n'a aucune importance. Et tous les machins qui viennent de "/usr/lib/dri/fglrx_dri.so", c'est pas ma faute à moi !

Et pour finir, le charmant petit message de Valgrind : wink

==4652== More than 10000000 total errors detected.  I'm not reporting any more.
==4652== Final error counts will be inaccurate.  Go fix your program!
==4652== Rerun with --error-limit=no to disable this cutoff.  Note
==4652== that errors may occur in your program without prior warning from
==4652== Valgrind, because errors are no longer being displayed.

Mon blog : petit projet de jeux en 3D (libres, bien sûr).

Hors ligne

#10 Le 14/05/2009, à 19:26

grim7reaper

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Bah t'inquiètes, si je propose c'est que ça ne m'embête pas (en ce moment je suis plus à ça près niveau script, je code à longueur de journée et manipule des fichiers et des regexp à tour de bras pour cause de stage).

L'idéal, si cela est possible bien entendu, c'est que tu puisses récupérer l'ensemble des messages d'erreurs (en utilisant la fameuse option --error-limit=no) dans un fichier texte.
Ensuite tu me fournis le fichier (via mail, Jabber, ou upload sur un site genre mediafire puis tu me passes l'URL) et hop moi je commence a taffer dessus wink.

Parce que là le problème c'est que j'ai un seul exemple d'erreur (lecture illégale il me semble) donc c'est un peu limite pour déterminer un bon modèle.

Sinon, histoire de voir si j'ai bien compris : il faut que j'élimine toutes les erreurs concernant fglrx, c'est bien ça ?

Hors ligne

#11 Le 14/05/2009, à 19:27

Link31

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Un début de solution :

valgrind --leak-check=full --gen-suppressions=all glxgears 2>&1 | egrep "^[{}]|^   [^ \t]" >> fglrx.supp

Ça te permet d'éliminer déjà un certain nombre d'erreurs, en utilisant le fichier avec --suppressions=fglrx.supp. On suppose que glxgears n'a pas de fuites de mémoire...

Tu peux aussi t'assurer d'une façon ou d'une autre que ton code n'a pas de fuites de mémoire, puis lancer cette commande sur ton programme au lieu de glxgears. Comme ça, tu pourras vérifier que tes futures modifications ne créeront pas de fuites de mémoire supplémentaires.

Hors ligne

#12 Le 15/05/2009, à 08:39

Eldermê

Re : [Résolu] Valgrind et les 10000 erreurs de fglrx

Merci beaucoup Link31 ! C'est exactement ce qu'il me fallait.
Merci également à toi, grim7reaper, pour ta proposition de me faire un script. Mais du coup, je n'en aurai pas besoin.

En fait, générer les erreurs à éliminer avec glxgears ne suffit pas : quand je fait ensuite tourner Valgrind sur mon programme avec le fichier le suppressions créé, je suis encore au-dessus des 10000 erreurs ! Mais effectivement, en regardant vite fait, on voit que ce ne sont pas les mêmes...

En lançant ta commande sur mon programme, ça me génère un fichier de suppression de 2000 lignes, donc à la limite je peux enlever à la main les erreurs qui ne semblent pas venir que de fglrx.

Une autre solution qui me paraît plus satisfaisante, c'est de coder un petit programme de quelques dizaines de lignes qui se contente d'initialiser un contexte OpenGL en utilisant SDL (du coup, ce sera plus proche de mon programme que glxgears) et affiche 2 triangles, en s'assurant que tout ça soit parfaitement propre. Et ensuite, je pourrais utiliser ce mini-programme pour générer mon fichier de suppression d'erreurs.

Avec ça, je devrais pouvoir m'en sortir. N'empêche, vivement qu'ATI/AMD libère les specs de ma carte, et que je puisse utiliser un driver libre...

Dernière modification par Eldermê (Le 15/05/2009, à 08:43)


Mon blog : petit projet de jeux en 3D (libres, bien sûr).

Hors ligne