track-origins=yes
Valgrind 将通过该选项告诉您未初始化值的来源。
我试图抑制这些警告,但问题是基于未初始化值的数据可以传播到任何地方,也会在其他地方引起警告。
解决方案将通过未初始化数据的来源来抑制。我该怎么做?可能吗?似乎抑制文件仅过滤堆栈跟踪。
我想要这个的原因是,OpenSSL 通过故意使用未初始化的值来增强随机性,并且我想用 valgrind 测试发布版本(所以 -DPURIFY 不是一个选项)。
track-origins=yes
Valgrind 将通过该选项告诉您未初始化值的来源。
我试图抑制这些警告,但问题是基于未初始化值的数据可以传播到任何地方,也会在其他地方引起警告。
解决方案将通过未初始化数据的来源来抑制。我该怎么做?可能吗?似乎抑制文件仅过滤堆栈跟踪。
我想要这个的原因是,OpenSSL 通过故意使用未初始化的值来增强随机性,并且我想用 valgrind 测试发布版本(所以 -DPURIFY 不是一个选项)。
我对您的问题的初步阅读是,您可能可以禁用所有未初始化的值错误,在这种情况下--undef-value-errors=no
可以解决问题。
如果您正在寻找零碎的东西,那么一些仓促的测试似乎表明使用--gen-suppressions=yes
,然后为相关输出回答 y 并将它们放入抑制文件中,这在我摆弄我的 openssl 二进制文件时对我有用。
此外,您可能会找到如何告诉 Valgrind 完全禁止特定 .so 文件的答案?有用。
解决方案将通过未初始化数据的来源来抑制。我该怎么做?可能吗?似乎抑制文件仅过滤堆栈跟踪。
我对 OpenSSL 有同样的问题。根据 Valgrind 邮件列表上的 Tom Hughes 的说法,这是不可能的。请参阅抑制规则中的帧级通配符不匹配?.
在我的例子中,我试图使用帧级通配符来抑制所触及的内存上的发现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
...
}
尝试将其添加到抑制文件中。
{
cond
Memcheck:Cond
...
fun:*
...
}
{
value8
Memcheck:Value8
...
fun:*
...
}
{
value4
Memcheck:Value4
...
fun:*
...
}
例如,如果您的可执行文件是a.out
,请使用内容创建./val.supp
文件并运行valgrind --suppressions=./val.supp ./a.out
.