Valgrind: deshabilita la comprobación de salto condicional (o de toda la biblioteca)

Estoy desarrollando la aplicación utilizando la API OpenSSL. Como se sabe, OpenSSL utiliza miriades de variables globales que Valgrind toma como errores (“salto o movimiento condicional …”, etc.). Por lo tanto, la salida de Valgrind se obstruye con errores de las bibliotecas compartidas. Esto es muy inconveniente para fines de depuración, porque cada vez que recibo:

Más de X errores totales detectados. Ya no informo más. Los recuentos de errores finales serán inexactos. ¡Ve a arreglar tu progtwig!

Las preguntas son:

  1. ¿Puedo deshabilitar las comprobaciones de memoria de las bibliotecas de fiestas ( -lssl y -lcrypto en mi caso) en Valgrind?
  2. ¿O puedo enfocarme solo en errores “definitivamente perdidos”?

    Gracias.

Valgrind se puede configurar para eliminar los errores en las bibliotecas.

Los detalles sobre esto se encuentran aquí: http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress

Desde la página web enlazada arriba:

Nota: De lejos, la forma más fácil de agregar supresiones es usar la opción –gen-suppressions = yes descrita en las Opciones de la línea de comandos del Core. Esto genera supresiones automáticamente. Sin embargo, para obtener los mejores resultados, puede editar la salida de –gen -pressionions = yes a mano, en cuyo caso sería recomendable leer esta sección.

Añadiendo la opción

 --undef-value-errors=no 

funciona para mí (ocultar todo “El salto o movimiento condicional depende de los valores sin inicializar”).

Para más información vea la página del manual de Valgrind.

Tenga en cuenta que también puede desactivar las advertencias generadas por su propio código defectuoso si desactiva / suprime todas las comprobaciones en OpenSSL. Por ejemplo, cuando pasas estructuras no completamente inicializadas a las funciones de OpenSSL, esto también puede resultar en errores de “salto o movimiento condicional …” y probablemente quieras verlos.

Es necesario comstackr OpenSSL con el indicador PURIFY (-DPURIFY en CFLAGS) para deshacerse de los errores. No use la versión comstackda de esa manera en su aplicación final, solo para fines de depuración, ya que disminuye la entropía utilizada en varios lugares.

Por ejemplo, compile OpenSSL en modo de depuración con:

 ./config -d no-static shared zlib -Wa,--noexecstack -DPURIFY -O0 -ggdb3