使用--trace-children和execl()时保留valgrind日志文件中的内容

时间:2015-05-23 18:15:46

标签: c exec valgrind

我目前正在清理现有的代码库,并遇到了一个涉及valgrind的问题,我想修复它,因为它会导致有用的信息丢失。 Valgrind被称为:

/usr/bin/valgrind --leak-check=full -v --log-file=./log/valgrind/valgrind-%p.log --trace-children=yes ./myapp arg1 arg2 >&! $logfile

有问题的程序是一台具有内置重启功能的服务器,该功能通过execl()实现。

当服务器重新启动时,迄今为止在日志文件中收集的所有内容(./log/valgrind/valgrind-1234.log)都将被清除:日志文件的顶部显示重新启动时传递的参数。之前的任何事物(观察到已经存在使用tail -f)不再存在。

一方面,了解它是如何开始执行的新流程图像是有道理的。另一方面,我没有在之前的化身上运行valgrind,只是看到它的辛苦工作消失了!

有没有人知道如何让valgrind附加到自己的日志文件而不是将它们重新开始?如果可能的话,我想避免切换到valgrind的--log-socket因为我不想运行另一台服务器:我现在正在打扫房子,增加复杂性与我们现在需要的完全相反。 :)

1 个答案:

答案 0 :(得分:3)

您的问题的可能解决方案可能是让valgrind记录到指定的文件描述符,这样您就可以将其附加到日志文件中: The syntax of the command is incorrect.