在一个C++项目的上下文中使用valgrind,我一直试图抑制来自第三方库的内存泄漏信息。我将生成特定的抑制文件条目,运行valgrind和--gen-suppressions=all
,并获得例如:
{
<insert_a_suppression_name_here>
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/lib/x86_64-linux-gnu/libcuda.so.515.105.01
obj:/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.6.55
obj:/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.6.55
obj:/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.6.55
obj:/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.6.55
}
现在我想推广这个规则,以便它抑制来自任何名为*libcuda*
的库的任何警告。我尝试了不同的方法,比如:
{
cuda
memcheck:Leak
...
obj:*libcuda*
...
}
或
{
cuda
memcheck:Leak
obj:*libcuda*
}
或(灵感来自this)
{
cuda
memcheck:Leak
fun:*alloc
...
obj:*libcuda*
...
}
所有这些都不起作用,所以即使valgrind毫无怨言地读取了抑制文件,我的libcuda源消息也不会被抑制。有没有办法让Valgrind接受这种通用的抑制命令?
1条答案
按热度按时间9o685dep1#
主要问题是您将
Memcheck
与小写m
拼写错误。以下内容将起作用:
您输入的最后一个帧通配符
...
是不必要的。