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 el mío. ¿Es posible hacer que valgrind ignore cosas que vienen de más profundo que mi propio código?¿Es posible hacer que valgrind ignore ciertas bibliotecas?
Respuesta
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.
http: // valgrind.org/docs/manual/manual-core.html # manual-core.suppress Este es el enlace para obtener información sobre la supresión de errores para valgrind. – blwy10
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á de OpenSSL.
La compilación de OpenSSL con una opción "PURIFICAR" puede ayudar aquí. Desafortunadamente, debido a algunas acciones mal pensadas por una gran distribución de Linux, es poco probable que se convierta en default.
Una solución muy directa es la opción --undef-value-errors=no
de Memcheck.
Agradable. Ignorar los valores de undef hizo realidad mi caso particular, donde tuve "más de 10000000 errores totales detectados" provenientes de una biblioteca (no OpenSSL), analicé el resto del código. –
Suponiendo que está ejecutando la herramienta memcheck y desea ignorar fugas errores en libcrypto única, se puede poner una supresión como:
{
ignore_libcrypto_conditional_jump_errors
Memcheck:Leak
...
obj:*/libcrypto.so.*
}
... en un archivo y pase a valgrind
con --suppressions=*FILENAME*
.
Ignorar fugas errores en todas las bibliotecas compartidas bajo 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 puede que tenga que añadir variaciones adicionales del patrón de directorio para dar cuenta de la ubicación de la X11 y Bibliotecas GTK.
Tenga en cuenta que esto ignorará los errores causados por las devoluciones de llamada que escribió que fueron invocadas por las bibliotecas. La captura de errores en las devoluciones de llamada podrían casi 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 por una biblioteca que utilizan el malloc Valgrind. Como valgrind malloc se inyecta directamente en el texto del programa, no se carga como una biblioteca dinámica, aparece en la pila de la misma manera que 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.
FYI: Estoy usando valgrind 3.5.
Lo único que falta en esta respuesta es qué hacer con los textos de supresión ... – lvella
Estas configuraciones están destinadas a guardarse en el archivo de supresión que se lee cuando Valgrind se inicia. Opción --suppressions =
@mormegil accidentalmente rechazó la respuesta. Lo siento – Greg
- 1. ¿Puedo hacer que valgrind ignore las bibliotecas glibc?
- 2. ¿Cómo hacer que Proguard ignore las bibliotecas externas?
- 3. cómo decirle a pylint que ignore ciertas importaciones?
- 4. ¿Es posible ignorar ciertas pruebas unitarias?
- 5. ¿Es posible hacer que gcc ignore las opciones de línea de comando desconocidas?
- 6. ¿Es posible hacer que SCP ignore los enlaces simbólicos durante la copia?
- 7. ¿Es posible hacer que el compilador de Google Closure * no * incorpore ciertas funciones?
- 8. Valgrind errores en las bibliotecas c?
- 9. Hacer que Python ignore los archivos .pyc
- 10. ¿Cómo hacer que Hibernate ignore un método?
- 11. ¿Es posible crear un paquete Mono que incluya bibliotecas WPF?
- 12. ¿Es posible hacer que Class.forName ("") sea flexible?
- 13. Cómo hacer que Varnish ignore, no elimine las cookies
- 14. ¿Es posible utilizar las bibliotecas CommonJS todavía?
- 15. ¿Cómo hacer que .gitignore ignore los archivos compilados sin extensión?
- 16. Hacer que Emacs ignore el diseño del teclado del sistema
- 17. ¿Cómo consigo que ReSharper ignore ciertas categorías cuando ejecuta todas las pruebas?
- 18. ¿Cómo hago que Beyond Compare ignore ciertas diferencias al comparar versiones de Delphi Form Files
- 19. ¿Cómo hacer que mercurial ignore todos los archivos ocultos?
- 20. Hacer que XStream ignore una variable privada específica
- 21. ¿Cómo puedo hacer que Inno Setup ignore los directorios vacíos?
- 22. Cómo hacer que SVN ADD ignore los binarios
- 23. ¿Puedo hacer que git diff ignore los cambios de permisos?
- 24. Java, LDAP: ¿Hacer que no ignore las contraseñas en blanco?
- 25. ¿Cómo hacer que git ignore los cambios en el caso?
- 26. Cómo hacer que Git en Windows ignore los enlaces simbólicos
- 27. ¿Cómo hacer que 'svn log' ignore los cambios de propiedad?
- 28. ¿Cómo hacer que javascript ignore el carácter de escape (\)?
- 29. ¿Cómo hacer que el analizador de Ruby JSON ignore json_class?
- 30. ¿Qué puede hacer que CGDisplayCreateImageForRect capture o ignore el cursor?
+1, estoy teniendo los mismos problemas. La biblioteca GL de NVIDIA hace saltos condicionales basados en la memoria no inicializada, y 'std :: string' sigue arrojando falsos positivos (" posiblemente perdidos ") también. – Thomas