假设您正在运行memcheck工具而你想忽略Leak中的错误仅限 libcrypto,你可以放一个抑制 https://valgrind.org/docs/manual/mc-manual.html#mc-manual.suppfiles like:
{
ignore_libcrypto_conditional_jump_errors
Memcheck:Leak
...
obj:*/libcrypto.so.*
}
...放入文件并将其传递给valgrind
with --suppressions=FILENAME
.
忽略Leak中的错误所有共享库在任何下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.*
}
这不太可能,但您可能需要添加目录模式的其他变体来说明 X11 和 GTK 库的位置。
请注意,这将忽略您编写的由库调用的任何回调引起的错误。捕获这些回调中的错误可以almost完成:
{
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。