Forum Programmation.c++ Exploiter les informations fournies par valgrind.

Posté par  .
Étiquettes : aucune
0
7
avr.
2006
Hello !
Suite de mon message précédent https://linuxfr.org/forums/37/15923.html / http://linuxfr.org/forums/37/15923.html

Je ne poste pas en double, je veux juste comprendre comment tirer partie des informations que j'ai récupéré.
Ce n'est pas un scoop, dcopidl foire sur ma machine et donc la compilation de kde échoue.
J'ai donc compilé qt et kdelibs en ajoutant les informations de débuggage. J'obtiens les informations suivantes :

valgrind ../dcop/dcopidl/dcopidl ksycoca.h
==32467== Memcheck, a memory error detector.
==32467== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==32467== Using LibVEX rev 1575, a library for dynamic binary translation.
==32467== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==32467== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==32467== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==32467== For more details, rerun with: -v
==32467==
<!DOCTYPE DCOP-IDL><DCOP-IDL>
ksycoca.h
dcopobject.h
qobject.h
qstringlist.h
ksycocatype.h
kdelibs_export.h
==32467== Invalid read of size 4
==32467== at 0x804D4D6: QShared::ref() (qshared.h:49)
==32467== by 0x461C602: QString::QString(QString const&) (qstring.cpp:1397)
==32467== by 0x804D6A8: operator+(QString const&, QString const&) (qstring.h:1037)
==32467== by 0x804D2D5: yyparse() (yacc.yy:201)
==32467== by 0x804D920: main (main.cpp:82)
==32467== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==32467==
==32467== Process terminating with default action of signal 11 (SIGSEGV)
==32467== Access not within mapped region at address 0x0
==32467== at 0x804D4D6: QShared::ref() (qshared.h:49)
==32467== by 0x461C602: QString::QString(QString const&) (qstring.cpp:1397)
==32467== by 0x804D6A8: operator+(QString const&, QString const&) (qstring.h:1037)
==32467== by 0x804D2D5: yyparse() (yacc.yy:201)
==32467== by 0x804D920: main (main.cpp:82)
==32467==
==32467== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 59 from 1)
==32467== malloc/free: in use at exit: 29,818 bytes in 1,111 blocks.
==32467== malloc/free: 5,280 allocs, 4,169 frees, 148,134 bytes allocated.
==32467== For counts of detected errors, rerun with: -v
==32467== searching for pointers to 1,111 not-freed blocks.
==32467== checked 675,896 bytes.
==32467==
==32467== LEAK SUMMARY:
==32467== definitely lost: 7,587 bytes in 493 blocks.
==32467== possibly lost: 0 bytes in 0 blocks.
==32467== still reachable: 22,231 bytes in 618 blocks.
==32467== suppressed: 0 bytes in 0 blocks.
==32467== Use --leak-check=full to see details of leaked memory.
Erreur de segmentation


Comment exploiter ces informations ?
J'avoue avoir fait du C/C++ dans ma jeunesse, mais c'est bien loin maintenant, et je ne sais pas quoi faire de ces informations pour résoudre le problème.
Par avance merci pour votre aide.
  • # RTFM ?

    Posté par  (site web personnel) . Évalué à 3.

    La doc de valgrind est pas mal cela vaut le cout de la lire...

    La 1er erreur donne la pile d'appel d'une lecture qui lit une adresse qu'elle ne devrait pas.

    La 2ième qui est fatal est le déférencement d'un pointeur null (donc non initialisé). Cela peut avoir un rapport avec la 1er erreur mais pas forcément.

    Par contre le yyparse est une fonction générée par bison ou lex qui appelle des objet Qt. C'est osé :) (yyparse() est généré depuis un autre fichier par bison ou lex)

    "La première sécurité est la liberté"

    • [^] # Re: RTFM ?

      Posté par  . Évalué à 2.

      Bon, déjà, merci pour ces informations.
      Ca ne m'aide pas forcément, car je ne vois toujours pas comment résoudre le problème, mais au moins, je sais où ça cliche !
      Pour le coup du pointeur, oui, j'y avais pensé, mais je me vois mal fouiller les sources pour l'initialiser....
      En tout cas, merci, ça éclaire un peu ma lanterne !
      • [^] # Re: RTFM ?

        Posté par  (site web personnel) . Évalué à 1.

        Pour le coup du pointeur, oui, j'y avais pensé, mais je me vois mal fouiller les sources pour l'initialiser....

        en meme temps si y'a un bug, a part corriger le bug je vois pas trop :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.