假设您正在运行 memcheck 工具并且您想忽略 libcrypto only 中的 Leak 错误,您可以将 suppression 设为:
{
ignore_libcrypto_conditional_jump_errors
Memcheck:Leak
...
obj:*/libcrypto.so.*
}
... 放入一个文件并将其传递给valgrind 和--suppressions=*FILENAME*。
忽略任何 lib 目录下的 所有共享库 中的 Leak 错误(/lib、 /lib64, /usr/lib, /usr/lib64, ...):
{
ignore_unversioned_libs
Memcheck:Leak
...
obj:*/lib*/lib*.so
}
{
ignore_versioned_libs
Memcheck:Leak
...
obj:*/lib*/lib*.so.*
}
这不太可能,但您可能需要添加目录模式的其他变体来说明 X11 和 GTK 库的位置。
请注意,这将忽略由您编写的由库调用的任何回调引起的错误。在这些回调中捕获错误几乎可以通过以下方式完成:
{
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.*
}
...但这揭示了使用 Valgrind malloc 的库调用中的错误。由于 valgrind malloc 直接注入到程序文本中——不是作为动态库加载的——它在堆栈中的显示方式与您自己的代码相同。这使得 Valgrind 可以跟踪分配,但也使得按照您的要求执行操作变得更加困难。
仅供参考:我使用的是 valgrind 3.5。