我有一个完全用 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 运行的守护进程可能非常慢,并且可能无法按预期运行