使用 --trace-children=yes 的 valgrind 结果不正确

Incorrect results by valgrind with --trace-children=yes

我无法弄清楚如何在多进程场景中检测内存泄漏,其中子进程由父进程启动。

使用这个命令我看到了非常奇怪的行为

valgrind --trace-children=yes --leak-check=full --show-reachable=yes --error-limit=no --log-file=valgrind.log ./parent

如果有 mem leak in both parent & child,我看到生成的 valgrind.log 仅针对父级检测到泄漏。 但是,如果有 mem leak only in child 生成的报告是正确的。

重现此内容的示例代码 https://github.com/shrkamat/valg

现在文档很清楚了!

--日志文件= 指定 Valgrind 应将其所有消息发送到指定文件。如果文件名是空的,它会导致中止。文件名中可以​​使用三种特殊格式说明符。 %p 替换为当前进程 ID。这对于调用多个进程的程序非常有用。警告:如果你使用 --trace-children=yes 并且你的程序调用了多个进程或者你的程序在之后没有调用 exec 的情况下分叉,并且你没有使用这个说明符(或下面的 %q 说明符),那么所有这些的 Valgrind 输出进程将进入一个文件,可能是混乱的,并且可能是不完整的。