有没有可能让valgrind忽略一些库?特别是glibc库..
实际问题:我有一些在正常执行中运行良好的代码。没有泄漏等。
当我尝试通过valgrind运行它时,我得到核心转储和程序重新启动/停止。
Core通常指向glibc函数(通常是fseek、mutex等)。我知道不兼容的glibc / valgrind版本可能会有一些问题。
我尝试了各种valgrind版本和glibc版本,但没有成功。有什么建议吗?
发布于 2013-03-21 05:29:53
这可能没有回答您的问题,但将为您提供如何抑制某些错误的细节(其他人已经提到了这些错误,但没有详细描述):
首先,运行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 bug”和链接是我为引用此块而添加的名称。现在,将该块保存到sendmsg.supp,并在下一次运行时告诉valgrind该文件:
valgrind --log-file=valgrind --suppressions=sendmsg.supp ./a.out而valgrind会优雅地忽略那个愚蠢的上游bug。
发布于 2010-05-25 09:44:21
正如unwind所指出的那样,valgrind有一个精心设计的机制,用于控制哪些过程以及如何进行检测。但是valgrind和glibc都是复杂的东西,你真的、真的、真的不想这么做。获得相互兼容的glibc和valgrind的最简单方法是从您选择的的Linux发行版获得两者的。事情应该“正常工作”,如果他们不能工作,你就有人可以抱怨了。
发布于 2010-05-24 18:57:16
是的,查查Valgrind的suppression system。
https://stackoverflow.com/questions/2896162
复制相似问题