20

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

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

4

3 回答 3

19

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

话虽如此,您仍然需要调查问题并确定它是否真的是误报(如果事实证明是这种情况,您可以自己为其编写抑制)或者它是否是您程序中的真正错误。

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

于 2009-04-28T07:29:46.297 回答
3

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

错误检查工具可检测基本库中的大量问题,例如 GNU C 库和 X11 客户端库,这些库预装在您的 GNU/Linux 系统上。你不能轻易地修复这些,但你不想看到这些错误(是的,有很多!)所以 Valgrind 读取错误列表以在启动时抑制。构建系统时,./configure 脚本会创建一个默认抑制文件。

您可以创建自己的错误抑制,您知道这些错误抑制与您的代码无关。

于 2009-04-28T23:05:07.220 回答
1

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

于 2009-04-30T13:17:41.890 回答