似乎有必要为每种类型的错误(Cond、Value4、Param 等)包含单独的抑制记录。但是根据我对 valgrind-3.6.0.SVN-Debian 的测试,我相信您可以对每种类型的错误使用以下简化形式...
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
obj:/path/to/library/thelibrary.so.*
...
}
{
<insert_a_suppression_name_here>
Memcheck:Leak
...
obj:/path/to/library/thelibrary.so.*
...
}
这三个点在 Valgrind 文档中称为帧级通配符。这些匹配调用堆栈中的零个或多个帧。换句话说,当谁调用库或库随后调用什么函数无关紧要时,您可以使用这些。
有时错误包括“obj:”帧,有时它们只使用“fun:”帧。这通常基于该函数是否包含在库的符号表中。如果目标是排除整个库,则最好在库不包含符号的情况下工作,这样您就可以根据库文件名进行排除,而不必为库中的每个函数调用创建单独的抑制。希望 Valgrind 足够聪明,可以抑制基于库文件名的错误,即使它确实知道函数名,但我还没有验证这一点。
如果您确实需要根据库中的各个函数添加抑制,您应该能够使用相同的表单...
{
<insert_a_suppression_name_here>
Memcheck:Leak
...
fun:the_name_of_the_function
...
}
注意:您可以包含--gen-suppressions=all
在 valgrind 命令行中,以查看抑制每个错误所需的确切形式和名称(包括任何 C++ 修改)。您可以使用该输出作为抑制记录的模板——您通常希望用其中替换大多数行,...
以简化抑制可能与特定库或函数调用相关联的所有错误的过程。
注意:<insert_a_suppression_name_here>
是一个占位符,您可以在其中键入所需的任何描述性文本。不能为空。