leaks how c debugging gcc profiling valgrind

c - how - valgrind ubuntu



¿Se conocen problemas de falsos positivos con Valgrind? (3)

¿Hay algún falso positivo conocido con Valgrind? Obtengo un ''Salto o movimiento condicional depende de los valores no inicializados'' con la función fmemopen , escribiendo en C y compilando con GCC. ¿Puedo estar seguro de que es real?

EDITAR: ¿Hay problemas conocidos que no están en los archivos de supresión? ¿Hay algunas cosas que uno puede hacer en un programa, que no son realmente errores pero Valgrind dirá que lo son? Si hay problemas conocidos, una lista estaría bien.


¿No fue la cosa de Debian SSL motivada por corregir algunos falsos positivos con Valgrind?


Sí, hay falsos positivos con Valgrind, es por eso que tiene archivos de supresión para determinadas versiones de glibc y gcc, por ejemplo. Los falsos positivos pueden surgir si está utilizando valgrind antiguo con gcc y glibc más nuevos, es decir, valgrind 3.3 con glibc 2.9.

Habiendo dicho eso, todavía tienes que buscar un problema y descubrir si es realmente un falso positivo (si ese es el caso, puedes escribir una supresión para ti mismo) o es un error real en tu programa.

No hay una manera rápida y fácil de decir lo que está pasando aquí, pero en este caso, sospecho que está pasando un valor no inicializado de su código a un código de biblioteca. Prueba la opción de Valgrind --track-origins=yes . Mostrará de dónde proviene el valor sin inicializar. Si es tu código, probablemente deberías inicializarlo. Si está dentro de la biblioteca, podría ser el falso positivo o, aún así, los valores erróneos de los argumentos de llamada a la biblioteca podrían estar causándolo, así que verifique esos.


Valgrind viene con alguna supresión de errores predeterminada, pero de ninguna manera cubre todas las bibliotecas.

Las herramientas de comprobación de errores detectan numerosos problemas en las bibliotecas base, como la biblioteca C de GNU y las bibliotecas cliente X11, que vienen preinstaladas en su sistema GNU / Linux. No puedes solucionarlos fácilmente, pero no quieres ver estos errores (y sí, ¡hay muchos!) Así que Valgrind lee una lista de errores para eliminarlos al iniciar. La secuencia de comandos ./configure crea un archivo de supresión predeterminado cuando se crea el sistema.

Puede crear sus propias supresiones de errores que sabe que son irrelevantes para su código.