如何通过未初始化值的来源抑制valgrind警告?

时间:2013-07-24 09:25:28

标签: valgrind

Valgrind会使用track-origins=yes选项告诉您未初始化值的来源。

我试图压制这些警告,但问题是基于未初始化值的数据可以传播到任何地方,在其他地方也会发出警告。

解决方案将取决于未初始化数据的来源。我该怎么做?可能吗?似乎抑制文件只过滤堆栈跟踪。

我想要的原因是,OpenSSL通过故意使用未初始化的值来增强随机性,我想用valgrind测试发布版本(所以-DPURIFY不是一个选项)。

3 个答案:

答案 0 :(得分:9)

我对您的问题的初步了解是,您可能无法禁用所有未初始化的值错误,在这种情况下--undef-value-errors=no可以解决问题。

如果你正在寻找零碎的东西,一些仓促的测试似乎表明使用--gen-suppressions=yes,然后回答y的相关输出,并将它们放在一个压缩文件中,当我摆弄我的openssl二进制文件时。 / p>

另外,您可能会发现How do you tell Valgrind to completely suppress a particular .so file?的答案很有用。

答案 1 :(得分:3)

  

解决方案将取决于未初始化数据的来源。我该怎么做?可能吗?似乎抑制文件只过滤堆栈跟踪。

我遇到了与OpenSSL相同的问题。据Valgrind邮件列表中的Tom Hughes所说,这是不可能的。请参阅Frame-level wildcard not matching in suppression rule?

就我而言,我试图使用帧级通配符来抑制RAND_init_fips(问题的OpenSSL FIPS版本)所触及的内存的发现。这确实,但我们希望它能够工作:

{
   RAND_init_fips_1
   Memcheck:Cond
   ...
   fun:RAND_init_fips
   ...
}

{
   RAND_init_fips_2
   Memcheck:Value8
   ...
   fun:RAND_init_fips
   ...
}

{
   RAND_init_fips_3
   Memcheck:Value4
   ...
   fun:RAND_init_fips
   ...
}

答案 2 :(得分:0)

尝试将其添加到禁止文件中。

{
   cond
   Memcheck:Cond
   ...
   fun:*
   ...
}
{
   value8
   Memcheck:Value8
   ...
   fun:*
   ...
}

{
   value4
   Memcheck:Value4
   ...
   fun:*
   ...
}

例如,如果您的可执行文件是a.out,则使用内容创建./val.supp文件并运行valgrind --suppressions=./val.supp ./a.out