我无法弄清楚如何在多进程场景中检测到memleak,其中子进程是由父进程启动的。
使用此命令,我看到非常奇怪的行为
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
答案 0 :(得分:0)
现在文档清晰了!
- 日志文件= 指定Valgrind应将其所有消息发送到指定文件。如果文件名为空,则会导致中止。可以在文件名中使用三种特殊格式说明符。 %p将替换为当前进程ID。这对于调用多个进程的程序非常有用。警告:如果您使用--trace-children = yes并且您的程序调用多个进程或您的程序分支而不事后调用exec,并且您不使用此说明符(或下面的%q说明符),则Valgrind输出来自所有这些进程都会进入一个文件,可能是混乱,可能还不完整。