Valgrind会使用track-origins=yes
选项告诉您未初始化值的来源。
我试图压制这些警告,但问题是基于未初始化值的数据可以传播到任何地方,在其他地方也会发出警告。
解决方案将取决于未初始化数据的来源。我该怎么做?可能吗?似乎抑制文件只过滤堆栈跟踪。
我想要的原因是,OpenSSL通过故意使用未初始化的值来增强随机性,我想用valgrind测试发布版本(所以-DPURIFY不是一个选项)。
答案 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
。