19

track-origins=yesValgrind 将通过该选项告诉您未初始化值的来源。

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

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

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

4

3 回答 3

10

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

如果您正在寻找零碎的东西,那么一些仓促的测试似乎表明使用--gen-suppressions=yes,然后为相关输出回答 y 并将它们放入抑制文件中,这在我摆弄我的 openssl 二进制文件时对我有用。

此外,您可能会找到如何告诉 Valgrind 完全禁止特定 .so 文件的答案?有用。

于 2013-08-22T21:47:06.260 回答
3

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

我对 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
   ...
}
于 2014-02-28T04:38:52.137 回答
0

尝试将其添加到抑制文件中。

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

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

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

于 2019-09-05T14:43:13.203 回答