lost leak full definitely check valgrind suppress-warnings

leak - definitely lost valgrind



¿Es posible hacer que valgrind ignore ciertas bibliotecas? (3)

Con OpenSSL en particular, esto es muy difícil. Las claves de cifrado SSL se basan parcialmente en la basura de la pila sin inicializar, lo que significa que todos los datos descifrados también están contaminados. Esta contaminación tiende a extenderse más allá del propio OpenSSL.

Compilar OpenSSL con una opción "PURIFICAR" puede ayudar aquí. Desafortunadamente, debido a algunas acciones mal pensadas por una importante distribución de Linux, es poco probable que esto se convierta en predeterminado.

Una solución muy contundente es la opción --undef-value-errors=no de --undef-value-errors=no .

¿O preferiblemente todos ellos en lugar de solo mi código? Mi programa usa Gtk, Loudmouth y algunas otras cosas, y estos dos (y algunos detrás de ellos, libgcrypto, libssl) están causando tantos errores que no puedo detectar los míos. ¿Es posible hacer que valgrind ignore las cosas que vienen de más profundo que mi propio código?


Puede generar supresiones para los errores de las bibliotecas, pero no creo que pueda excluir las bibliotecas en general.

También es difícil saber automáticamente si un error de memoria en la biblioteca se debe a un problema en su código o no.


Suponiendo que está ejecutando la herramienta memcheck y desea ignorar los errores de fuga solo en libcrypto , podría poner una supresión como:

{ ignore_libcrypto_conditional_jump_errors Memcheck:Leak ... obj:*/libcrypto.so.* }

... en un archivo y páselo a valgrind con --suppressions=*FILENAME* .

Para ignorar los errores de pérdida en todas las bibliotecas compartidas en cualquier directorio lib ( / lib , / lib64 , / usr / lib , / usr / lib64 , ...):

{ ignore_unversioned_libs Memcheck:Leak ... obj:*/lib*/lib*.so } { ignore_versioned_libs Memcheck:Leak ... obj:*/lib*/lib*.so.* }

Es poco probable, pero es posible que deba agregar variaciones adicionales del patrón de directorio para tener en cuenta las ubicaciones de las bibliotecas X11 y GTK.

Tenga en cuenta que esto ignorará los errores causados ​​por las devoluciones de llamadas que escribió que fueron invocadas por las bibliotecas . Los errores de captura en esas devoluciones de llamada casi se pueden hacer con:

{ ignore_unversioned_libs Memcheck:Leak obj:*/lib*/lib*.so ... obj:*/lib*/lib*.so } { ignore_versioned_libs Memcheck:Leak obj:*/lib*/lib*.so.* ... obj:*/lib*/lib*.so.* }

... pero esto revela errores en las llamadas de una biblioteca que usa el malloc de Valgrind. Dado que valgrind malloc se inyecta directamente en el texto del programa, no cargado como una biblioteca dinámica, aparece en la pila de la misma manera que lo hace su propio código. Esto le permite a Valgrind rastrear las asignaciones, pero también hace que sea más difícil hacer exactamente lo que ha pedido.

Para tu información: Estoy usando valgrind 3.5.