我目前正在清理现有的代码库,遇到了一个涉及 valgrind 的问题,我想修复它,因为它会导致有用的信息丢失。Valgrind 被称为:
/usr/bin/valgrind --leak-check=full -v --log-file=./log/valgrind/valgrind-%p.log --trace-children=yes ./myapp arg1 arg2 >&! $logfile
Run Code Online (Sandbox Code Playgroud)
有问题的程序是一个服务器,它具有内置的重启功能,通过execl()
.
当服务器重新启动时,到目前为止收集在日志文件中的所有内容 ( ./log/valgrind/valgrind-1234.log
) 都会被清除:日志文件的顶部显示了重新启动时传递的参数。在它之前的任何东西(使用 观察到已经存在tail -f
)不再存在。
一方面,看看它是如何开始执行的新过程映像是有道理的。另一方面,我并没有在前一个版本上运行 valgrind,只是为了看到它的辛勤工作消失了!
有谁知道一种让 valgrind 附加到自己的日志文件而不是重新启动它们的方法?如果可能的话,我想避免切换到 valgrind 的,--log-socket
因为我不想运行另一台服务器:我目前正在打扫房间,增加复杂性与我们现在需要的完全相反。:)
您的问题的可能解决方案可能是让 valgrind 日志记录到指定的文件描述符,这样您就可以附加到日志文件:
valgrind --log-fd=9 9>>test.log ./app