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

Preserving the content in valgrind's log files when using --trace-children and execl()

我目前正在清理现有的代码库,运行 涉及 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,因为我不想 运行 另一台服务器:我目前正在打扫房间,增加复杂性与我们需要的正好相反现在。 :)

您的问题的可能解决方案是让 valgrind 记录到指定的文件描述符,这样您就可以附加到日志文件: valgrind --log-fd=9 9>>test.log ./app