Ou, de préférence, tous au lieu de juste mon code? Mon programme utilise Gtk, grande gueule et quelques autres choses, et ces deux-là (et pour certains, derrière eux, libgcrypto, libssl) sont à l'origine de nombreuses erreurs que je n'arrive pas à détecter mon propre. Est-il possible de faire valgrind ignorer ce qui vient de plus profond que mon propre code?
Réponses
Trop de publicités?En supposant que vous êtes l'exécution de la memcheck outil et que vous voulez ignorer la Fuite des erreurs dans libcrypto seulement, vous pouvez essayer une répression comme:
{
ignore_libcrypto_conditional_jump_errors
Memcheck:Leak
...
obj:*/libcrypto.so.*
}
Pour ignorer la Fuite des erreurs dans toutes les bibliothèques partagées en vertu de toute lib du répertoire (/lib, /lib64, /usr/lib, /usr/lib64, ...):
{
ignore_unversioned_libs
Memcheck:Leak
...
obj:*/lib*/lib*.so
}
{
ignore_versioned_libs
Memcheck:Leak
...
obj:*/lib*/lib*.so.*
}
Son peu probable, mais vous devrez peut-être ajouter d'autres variations du répertoire de modèle pour tenir compte de l'emplacement de l'X11 et les librairies GTK.
Méfiez-vous que cela va ignorer les erreurs causées par les rappels que vous avez écrit qui ont été invoquées par les bibliothèques. La capture des erreurs dans ces rappels pourrait presque être fait avec:
{
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.*
}
... mais cela révèle des erreurs dans les appels par une bibliothèque qui utilisent le Valgrind malloc. Depuis valgrind malloc est injecté directement dans le texte du programme -- pas chargé comme une bibliothèque dynamique -- il apparaît dans la pile de la même façon que votre propre code ne. Cela permet Valgrind pour suivre les allocations, mais la rend aussi plus difficile à faire exactement ce que vous avez demandé.
Pour info: je suis en utilisant valgrind 3.5.
Avec OpenSSL en particulier, c'est très dur. Les clés de cryptage SSL reposent en partie sur des non initialisée pile d'ordures, ce qui signifie que toutes les données déchiffrées est contaminé trop. Cette contamination a tendance à se propager au-delà OpenSSL lui-même.
La compilation d'OpenSSL avec un "PURIFIER" option peut aider à ici. Malheureusement, en raison de certains mal pensé actions par une grande distribution Linux, il est peu probable de devenir par défaut.
Un très émoussé solution de contournement est memcheck de l' --undef-value-errors=no
option.