linux 使valgrind错误抑制通用于对象库,并带有通配符

hs1ihplo  于 2023-06-29  发布在  Linux
关注(0)|答案(1)|浏览(143)

在一个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接受这种通用的抑制命令?

9o685dep

9o685dep1#

主要问题是您将Memcheck与小写m拼写错误。
以下内容将起作用:

{
   cuda
   Memcheck:Leak
   ...
   obj:*libcuda*
}

您输入的最后一个帧通配符...是不必要的。

相关问题