有可能告诉valgrind忽略一些图书馆吗?
具体glibc库
具体glibc库
实际问题:
我有一些代码在正常执行中运行正常.无泄漏等
当我尝试通过valgrind运行它,我得到核心转储和程序重新启动/停止.
核心通常指向glibc函数(通常是fseek,mutex等).
我明白,与glibc / valgrind不兼容的版本可能会有一些问题.
我尝试过各种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 bug”和链接是我添加的名称来引用这个块.现在,将该块保存到sendmsg.supp,并在下一次运行时告诉valgrind该文件:
valgrind --log-file=valgrind --suppressions=sendmsg.supp ./a.out
valgrind会慷慨地忽视那个愚蠢的上游错误.