tad*_*zik 50 valgrind suppress-warnings
或者最好是所有这些而不仅仅是我的代码?我的程序使用Gtk,Loudmouth和其他一些东西,这两个(以及它们后面的一些,libgcrypto,libssl)本身导致了很多错误,我无法检测到自己的错误.是否有可能让valgrind忽略比我自己的代码更深层次的东西?
mor*_*gil 38
假设您正在运行memcheck工具并且您想要仅忽略libcrypto中的泄漏错误,您可以设置一个抑制:
{
ignore_libcrypto_conditional_jump_errors
Memcheck:Leak
...
obj:*/libcrypto.so.*
}
Run Code Online (Sandbox Code Playgroud)
...成一个文件,并把它传递给valgrind
同--suppressions=*FILENAME*
.
要忽略任何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.*
}
Run Code Online (Sandbox Code Playgroud)
这不太可能,但您可能需要添加目录模式的其他变体以考虑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.*
}
Run Code Online (Sandbox Code Playgroud)
...但是这会显示使用Valgrind malloc的库调用中的错误.由于valgrind malloc直接注入到程序文本中 - 不作为动态库加载 - 它在堆栈中的显示方式与您自己的代码相同.这允许Valgrind跟踪分配,但也更难以完全按照您的要求进行操作.
仅供参考:我使用的是valgrind 3.5.
Dou*_*der 10
您可以为库的错误生成抑制,但我认为您不能通常排除库.
此外,很难自动知道库中的内存错误是否是由代码中的问题引起的.
特别是OpenSSL,这非常困难.SSL加密密钥部分基于未初始化的堆栈垃圾,这意味着所有解密的数据也受到污染.这种污染往往超出OpenSSL本身.
使用"PURIFY"选项编译OpenSSL可能会有所帮助.不幸的是,由于主要Linux发行版的一些思路不佳,这不太可能成为默认.
一个非常直率的解决方法是memcheck的--undef-value-errors=no
选项.
归档时间: |
|
查看次数: |
19676 次 |
最近记录: |