2013-07-24 32 views
16

Valgrind会通过track-origins=yes选项告诉您未初始化值的来源。如何通过未初始化值的原点来抑制valgrind警告?

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

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

我想这样做的原因是,OpenSSL的目的是通过使用未初始化的值来增强随机性,并且我想用valgrind测试版本构建(所以-DPURIFY不是选项)。

+0

我在寻找完全相同的,但我怀疑这是不是一件Valgrind的支持,也有可能支持。这种抑制只适用于'track-origins = yes';没有它,压制就没用了。虽然我很高兴被证明是错误的! –

回答

6

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

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

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

+8

不想禁止未初始化的值,因为这样的错误可以在我的程序中... 我想valgrind不显示错误,当未初始化的值来自特定的函数。 – Calmarius

2

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

我和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 
    ... 
}