2010-05-19 17 views
11

Cuando utilicé valgrind para ayudarme a depurar una aplicación en la que estaba trabajando, noté una gran cantidad de ruido que parece quejándose de las bibliotecas estándar. Como prueba, hice esto;Valgrind 'ruido', ¿qué significa?

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

Luego hice esto;

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. 

Puede ver el resultado completo aquí: http://pastebin.com/gcTN8xGp

Tengo dos preguntas; en primer lugar, ¿hay alguna manera de suprimir todo el ruido?

--show-below-main está establecido en no de forma predeterminada, pero no parece ser un equivalente de "Mostrar después de principal".

Respuesta

5

Actualice a Valgrind 3.5.0 o superior. Entre otras cosas, los archivos .supp predeterminados se han actualizado.

12

Usted puede suprimir la salida añadiendo

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

a /usr/lib/valgrind/default.supp (o definir su propio archivo de supresión).

Parece ser un conocido error de linker/loader, al menos para Debian & desarrolladores de Arch Linux; No estoy seguro del resto, así como de su curso de acción planificado.

+0

Este problema fue con el uso de un glibc más nuevo de lo que Valgrind estaba familiarizado. +1 por apuntarme en la dirección correcta. –

4

Tengo estos síntomas de vez en cuando, y la solución es siempre a actualizar mis paquetes valgrind y libc para que estén sincronizados. Los simpáticos duendecillos de Debian se encargan del resto.