代码之家  ›  专栏  ›  技术社区  ›  Liran Orevi

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

  •  18
  • Liran Orevi  · 技术社区  · 17 年前

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

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

    3 回复  |  直到 14 年前
        1
  •  15
  •   Laurynas Biveinis    17 年前

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

    尽管如此,您仍然需要调查这个问题,找出它是否真的是一个误报(如果事实证明是这样的话,您可以自己写一个抑制代码),或者它是您程序中的一个真正的错误。

    这里没有简单快捷的方法来说明发生了什么,但在这种情况下,我怀疑您正在将未初始化的值从代码传递到库代码。尝试Valgrind选项 --track-origins=yes . 它将显示未初始化值的来源。如果这是您的代码,可能您应该初始化它。如果它在库中,那么它可能是错误的正值,或者,库调用参数的错误值可能会导致它,因此请检查这些参数。

        2
  •  2
  •   lothar    17 年前

    Valgrind附带了一些默认的错误抑制,但它们并没有覆盖所有库。

    错误检查工具检测基础库中的许多问题,例如GNU C库和X11客户机库,它们是预先安装在GNU/Linux系统上的。你不能很容易地修复这些错误,但你不想看到这些错误(是的,有很多错误!)因此,Valgrind在启动时读取要抑制的错误列表。构建系统时,/configure脚本将创建默认抑制文件。

    你可以自己创造 error suppressions 你知道的和你的代码无关。

        3
  •  1
  •   jldugger maiklos    17 年前

    Debian的ssl不是因为用valgrind修正了一些误报吗?