我可以让valgrind忽略glibc库吗?

是否可以告诉valgrind忽略一些库? 特别是glibc库..

实际问题:我有一些在正常执行中运行正常的代码。 没有泄漏等

当我尝试通过valgrind运行时,我得到核心转储和程序重新启动/停止。

核心通常指向glibc函数(通常是fseek,mutex等)。 我知道glibc / valgrind版本可能存在一些问题。

我尝试了各种valgrind版本和glibc版本,但没有运气。 有什么build议么?

Solutions Collecting From Web of "我可以让valgrind忽略glibc库吗?"

这可能不会回答你的问题,但会为你提供如何抑制某些错误的细节(其他人已经提到但没有详细描述):

首先,运行valgrind如下:

  valgrind --gen-suppressions=all --log-file=valgrind.out ./a.out 

现在,输出文件valgrind.out将包含一些自动生成的抑制块,如下所示:

 { stupid sendmsg bug: http://sourceware.org/bugzilla/show_bug.cgi?id=14687 Memcheck:Param sendmsg(mmsg[0].msg_hdr) fun:sendmmsg obj:/usr/lib/libresolv-2.17.so fun:__libc_res_nquery obj:/usr/lib/libresolv-2.17.so fun:__libc_res_nsearch fun:_nss_dns_gethostbyname4_r fun:gaih_inet fun:getaddrinfo fun:get_socket_fd fun:main } 

在哪里“愚蠢的Sendmsg错误”和链接是我添加到这个块的名称。 现在,将该块保存到sendmsg.supp并在下一次运行时告诉valgrind该文件:

 valgrind --log-file=valgrind --suppressions=sendmsg.supp ./a.out 

valgrind会优雅地忽略那个愚蠢的上游臭虫。

正如放松所指出的那样,valgrind有一个精心设计的机制来控制哪些程序是如何工作的。 但是valgrind和glibc都是复杂的野兽,你真的真的不想这样做。 获得相互兼容的glibc和valgrind的简单方法是从你选择的Linux发行版中获取两者 。 事情应该“正常”,如果没有,就有人抱怨。

是的,看看Valgrind的抑制系统 。

您可能想在Valgrind用户的邮件列表上询问这个问题(这非常有帮助)。 你可以抑制某些调用的输出,但是,抑制噪声是你所做的一切。 电话还在通过Valgrind。

为了完成你所需要的,你(理想情况下)用glibc适当地匹配Valgrind, 或者使用valgrind/valgrind.h的宏来解决它们。 使用这些,是的,你可以告诉valgrind不要碰某些东西。 我不确定什么样的调用都是一切的,但是如果它在valgrind下运行的话,你也可以(有选择地)在你自己的程序中运行一些代码。 请参阅valgrind/valgrind.hRUNNING_ON_VALGRIND宏。

另一个想到的是确保Valgrind编译正确,以处理线程 。 请记住,在Valgrind下的原子操作可能会导致程序在外挂操作期间崩溃,否则,如果配置不正确,则可能不会。

如果你已经交换了valgrind和glibc的版本,你有可能找到一个匹配,但在构建时错误地配置了valgrind。