将 valgrind 与守护程序附加,并收集每个守护程序调用的日志

Attach valgrind with daemon and collect logs for each daemon call

本文关键字:守护程序 调用 日志 valgrind      更新时间:2023-10-16

我有一个完全用 C++ 编写的客户端服务器系统。 服务器以/etc/init.d/serverd运行,具有启动/停止选项。 Client.exe执行任何命令,如client.exe --options。每次客户端调用时,守护程序都会命中。我想用/etc/init.d/serverd连接valgrind来检测泄漏。我尝试了以下选项,但失败了。

/usr/local/bin/valgrind --log-file=valgrind_1.log -v --trace-children=yes --leak-check=full --tool=memcheck --vgdb=yes --vgdb-error=0 /etc/init.d/ serverd start

每次它都无法与守护程序附加。

我们想要的是在启动时[ the exact point is , I will stop daemon , attach valgrind with it and then start it again ]valgrind与守护进程附加,以便每次执行client.exe --options时,都应该为守护进程生成日志--log-file=valgrind_1.log

有没有人知道如何做同样的事情?

似乎不可能将 valgrind 附加到现有进程:http://valgrind.org/docs/manual/faq.html#faq.attach

在我看来,最佳做法是杀死守护进程,并在 valgrind 中自行运行可执行文件。

对于 systemd 托管守护进程,您可以更改运行 valgrind ExecStart=,如下所示:

ExecStart={valgrind-command-with-flags}/usr/sbin/foo-daemon

请确保将输出重定向到明确定义的位置。

注意 :使用 valgrind 运行的守护进程可能非常慢,并且可能无法按预期运行