2010-05-19 6 views
11

Lorsque j'ai utilisé valgrind pour aider au débogage d'une application sur laquelle je travaillais, je remarque une énorme quantité de bruit qui semble se plaindre des bibliothèques standard. Comme un test, j'ai fait cela; Alors je l'ai faitValgrind 'bruit', qu'est-ce que ça veut dire?

echo 'int main() {return 0;}' | gcc -x c -o test - 

;

valgrind ./test 

==1096== Use of uninitialised value of size 8 
==1096== at 0x400A202: _dl_new_object (in /lib64/ld-2.10.1.so) 
==1096== by 0x400607F: _dl_map_object_from_fd (in /lib64/ld-2.10.1.so) 
==1096== by 0x4007A2C: _dl_map_object (in /lib64/ld-2.10.1.so) 
==1096== by 0x400199A: map_doit (in /lib64/ld-2.10.1.so) 
==1096== by 0x400D495: _dl_catch_error (in /lib64/ld-2.10.1.so) 
==1096== by 0x400189E: do_preload (in /lib64/ld-2.10.1.so) 
==1096== by 0x4003CCD: dl_main (in /lib64/ld-2.10.1.so) 
==1096== by 0x401404B: _dl_sysdep_start (in /lib64/ld-2.10.1.so) 
==1096== by 0x4001471: _dl_start (in /lib64/ld-2.10.1.so) 
==1096== by 0x4000BA7: (within /lib64/ld-2.10.1.so) 
* large block of similar snipped * 
==1096== Use of uninitialised value of size 8 
==1096== at 0x4F35FDD: (within /lib64/libc-2.10.1.so) 
==1096== by 0x4F35B11: (within /lib64/libc-2.10.1.so) 
==1096== by 0x4A1E61C: _vgnU_freeres (vg_preloaded.c:60) 
==1096== by 0x4E5F2E4: __run_exit_handlers (in /lib64/libc-2.10.1.so) 
==1096== by 0x4E5F354: exit (in /lib64/libc-2.10.1.so) 
==1096== by 0x4E48A2C: (below main) (in /lib64/libc-2.10.1.so) 
==1096== 
==1096== ERROR SUMMARY: 3819 errors from 298 contexts (suppressed: 876 from 4) 
==1096== malloc/free: in use at exit: 0 bytes in 0 blocks. 
==1096== malloc/free: 0 allocs, 0 frees, 0 bytes allocated. 
==1096== For counts of detected errors, rerun with: -v 
==1096== Use --track-origins=yes to see where uninitialised values come from 
==1096== All heap blocks were freed -- no leaks are possible. 

Vous pouvez voir le résultat complet ici: http://pastebin.com/gcTN8xGp

J'ai deux questions; Premièrement, y at-il un moyen de supprimer tout le bruit? --show-below-main est défini sur no par défaut, mais il ne semble pas y avoir d'équivalent --show-after-main.

Répondre

5

Effectuez une mise à niveau vers Valgrind 3.5.0 ou une version ultérieure. Entre autres, les fichiers .supp par défaut ont été mis à jour.

12

Vous pouvez supprimer la sortie en annexant

{ 
    ld error suppression 
    Memcheck:Cond 
    fun:dl_main 
    fun:_dl_sysdep_start 
    fun:_dl_start 
    obj:/lib64/ld-2.10.1.so 
} 

à /usr/lib/valgrind/default.supp (ou définir votre propre fichier de suppression).

Il semble qu'il s'agisse d'un bogue lié à l'éditeur de liens/chargeur, au moins pour les développeurs Debian & de Linux; Je ne suis pas sûr du reste, ainsi que de leur plan d'action prévu.

+0

Ce problème concernait l'utilisation d'une glibc plus récente que celle de Valgrind. +1 pour me pointer dans la bonne direction. –

4

J'ai ces symptômes de temps en temps, et la solution est toujours mettre à jour mes paquets valgrind et libc pour être en synchronisation. Les gentils petits elfes de Debian s'occupent du reste.

Questions connexes