2017-08-03 194 views
0

我无法弄清楚如何在多进程场景中检测到memleaks,其中子进程由父进程启动。valgrind带有--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 & childvalgrind.log已经泄密只有父母发现我看到生成的。 但是如果有mem leak only in child生成的报告是正确的。

示例代码现在复制本 https://github.com/shrkamat/valg

+0

它应该为孩子创建单独的日志文件。 – Serge

+0

我没有看到为子进程生成的任何日志文件。我只看到valgrind.log子进程的日志名称是什么。 – Kamath

回答

0

很明显形式的文档!

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

+0

如果它是一个文件,它应该在进程ID前面加上行,就像'=== pid ==='。你应该也可以在那里grep。 – Serge