【问题标题】:Is it possible to make valgrind ignore certain libraries?是否可以让 valgrind 忽略某些库?
【发布时间】:2010-07-04 11:24:02
【问题描述】:

或者最好是全部而不是我的代码?我的程序使用 Gtk、Loudmouth 和其他一些东西,而这两个(以及它们背后的一些,libgcrypto、libssl)本身导致了很多错误,以至于我无法检测到自己的错误。是否有可能让 valgrind 忽略来自比我自己的代码更深的东西?

【问题讨论】:

  • +1,我也遇到了同样的问题。 NVIDIA 的 GL 库会根据未初始化的内存进行条件跳转,std::string 也会不断抛出误报(“可能丢失”)。

标签: valgrind suppress-warnings


【解决方案1】:

假设您正在运行 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。

【讨论】:

  • 这个答案唯一缺少的是如何处理抑制文本......
  • 这些设置是为了保存在 Valgrind 启动时读取的抑制文件中。选项 --suppressions=valgrind.org/docs/manual/manual-core.html
  • 有点相关...stackoverflow.com/a/15535105/52074。该链接讨论了如何使用 memcheck 生成对日志文件的所有抑制。然后可以使用日志文件创建通配符抑制表达式。
【解决方案2】:

您可以为库的错误生成抑制,但我认为您通常不能排除这些库。

此外,很难自动知道库中的内存错误是否是由代码中的问题引起的。

【讨论】:

【解决方案3】:

尤其是使用 OpenSSL,这非常困难。 SSL 加密密钥部分基于未初始化的堆栈垃圾,这意味着所有解密的数据也受到污染。这种污染往往会蔓延到 OpenSSL 本身之外。

使用“PURIFY”选项编译 OpenSSL 可能会有所帮助。不幸的是,由于主要 Linux 发行版的一些考虑不周的行为,这不太可能成为默认设置。

memcheck 的--undef-value-errors=no 选项是一个非常直接的解决方法。

【讨论】:

  • 不错。忽略 undef 值实际上是我的特殊情况,我从库(不是 OpenSSL)中“检测到超过 10000000 个错误”,通过分析其余代码。
猜你喜欢
  • 2018-03-10
  • 2011-02-23
  • 2013-11-18
  • 2016-11-10
  • 2010-12-08
  • 2012-12-22
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多