Valgrind是否存在已知的误报问题?

时间:2009-04-28 07:19:21

标签: c debugging gcc profiling valgrind

Valgrind是否有任何已知的误报?我使用fmemopen函数得到'条件跳转或移动取决于未初始化的值',用C语言编写并用GCC编译。我能确定这是真的吗?

编辑:抑制文件中是否存在已知问题?在程序中是否可以做一些事情,这不是真正的错误,但Valgrind会说它们是?如果存在已知问题,列表会很好。

3 个答案:

答案 0 :(得分:16)

是的,Valgrind存在误报,这就是为什么它具有特定glibc和gcc版本的抑制文件的原因。如果你使用较旧的valgrind和较新的gcc和glibc,即valgrind 3.3和glibc 2.9,可能会出现误报。

话虽如此,你仍然需要调查问题并找出它是否真的是误报(如果结果是这样,你可以自己写一个抑制)或者它是一个真正的错误你的计划。

没有快速简便的方法来说明这里发生了什么,但在这种情况下,我怀疑你是否将未经初始化的值从代码传递到库代码。尝试Valgrind选项--track-origins=yes。它将显示未初始化值的来源。如果是你的代码,可能你应该初始化它。如果它在库内部,可能是误报,或者仍然是库调用参数的错误值可能导致它,所以检查它们。

答案 1 :(得分:2)

Valgrind带有一些默认的错误抑制,但它们绝不会覆盖所有库。

  

错误检查工具可以检测基础库中的许多问题,例如GNU C库和X11客户端库,这些库预装在GNU / Linux系统上。您无法轻松修复这些错误,但您不希望看到这些错误(是的,有很多错误!)因此,Valgrind会在启动时读取要抑制的错误列表。构建系统时,。/ configure脚本会创建默认抑制文件。

您可以创建自己的error suppressions,而这些{{3}}与您的代码无关。

答案 2 :(得分:1)

通过修复Valgrind的一些误报,不是Debian SSL的动机吗?