试着让你的程序干净到 Memcheck 不会报告任何错误。一旦你达到了这个状态,就更容易看到程序的更改何时导致 Memcheck 报告新的错误。多年使用 Memcheck 的经验表明,即使是大型程序也可以以干净的方式运行 Memcheck。例如,KDE、OpenOffice.org 和 Firefox 的大部分都是 Memcheck-clean,或者非常接近它。
这个块让我有点困惑。鉴于 C 标准的工作方式,我会假设大多数(如果不是全部)产生 memcheck 错误的做法会在程序上调用未定义的行为,因此应该像瘟疫一样避免。
然而,引用块中的最后一句话暗示实际上有“著名”程序在生产环境中运行,但存在 memcheck 错误。读完这篇文章后,我想我应该对此进行测试,并尝试使用 valgrind 运行 VLC,在启动它后立即收到一堆 memcheck 错误。
这让我想到了这个问题:是否有充分的理由不从生产程序中消除此类错误?发布包含此类错误的程序是否有任何好处?如果是,开发人员如何确保它的安全,尽管据我所知,包含此类错误的程序可能会发生不可预测的行为并且没有办法对其一般行为做出假设?如果是这样,您能否提供真实世界的示例,说明程序在出现这些错误时比没有错误时更好?