Valgrind是否存在已知的误报?我用fmemopen函数得到一个‘条件跳转或移动取决于未初始化的值’,用C语言编写,然后用GCC编译。我能确定这是真的吗?
编辑:是否存在未包含在抑制文件中的已知问题?有没有一些程序中可以做的事情,并不是真正的错误,但Valgrind会说它们是错误的?如果有已知的问题,列表会更好。
发布于 2009-04-28 07:29:46
是的,Valgrind存在误报,这就是为什么它有针对特定glibc和gcc版本的抑制文件的原因。如果您将较旧的valgrind与较新的gcc和glibc一起使用,即valgrind 3.3与glibc 2.9,则可能会出现假阳性。
话虽如此,你仍然必须调查问题,找出它是否真的是一个假阳性(如果是这样的话,你可以自己写一个抑制),或者它是你程序中的一个真正的bug。
没有快速而简单的方法来说明这里发生了什么,但在这种情况下,我怀疑您正在将未初始化的值从代码传递到库代码。尝试Valgrind选项--track-origins=yes。它将显示未初始化的值来自何处。如果这是你的代码,也许你应该初始化它。如果它在库中,它可能是假阳性,或者库调用参数的错误值可能会导致它,所以请检查这些。
发布于 2009-04-28 23:05:07
Valgrind附带了一些默认的错误抑制,但它们绝不会涵盖所有的库。
错误检查工具可以检测基础库中的大量问题,比如GNU C库和X11客户端库,这些库都是预先安装在您的GNU/
系统上的。您不能轻松地修复这些错误,但是您不希望看到这些错误(是的,有很多错误!)因此,Valgrind在启动时读取要抑制的错误列表。在构建系统时,./configure脚本会创建一个默认的抑制文件。
您可以创建自己的error suppressions,您知道它与您的代码无关。
发布于 2009-04-30 13:17:42
Debian SSL的动机不是因为用Valgrind修复了一些误报吗?
https://stackoverflow.com/questions/796600
复制相似问题