¿Es posible hacer que valgrind ignore ciertas bibliotecas?


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

Author: JohnnyHK, 2010-07-04

3 answers

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 es causado por un problema en su código o no.

 10
Author: Douglas Leeder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-04 11:40:34

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

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

... en un archivo y pasarlo a valgrind con --suppressions=*FILENAME*.

Ignorar Fuga errores en todas las bibliotecas compartidas en cualquier lib directorio (/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 cualquier devolución de llamada que escribió que fueron invocados por las bibliotecas. La captura de errores en esas devoluciones de llamada podría casi hacerse 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 utiliza el Valgrind malloc. Dado que valgrind malloc se inyecta directamente en el texto del programa not biblioteca dinámica appears aparece en la pila de la misma manera que su propio código. Esto permite a Valgrind realizar un seguimiento de 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.

 32
Author: mormegil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 07:46:15

Con OpenSSL en particular, esto es muy difícil. Las claves de cifrado SSL se basan parcialmente en la basura de la pila no inicializada, 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 "PURIFY" 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 memcheck.

 5
Author: jilles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-04 13:15:26