4

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

/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

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

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

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

4

2 回答 2

4

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

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

于 2014-11-06T13:28:53.913 回答
0

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

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

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

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

于 2019-06-26T17:06:03.040 回答