我有一个完全用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
有没有人知道如何做同样的事情?
答案 0 :(得分:1)
似乎无法将valgrind附加到现有进程: http://valgrind.org/docs/manual/faq.html#faq.attach
在我看来,最好的做法是杀死守护进程,并自己运行valgrind中的可执行文件。
答案 1 :(得分:0)
对于systemd托管守护程序,您可以更改ExecStart=
来运行valgrind,如下所示:
ExecStart = {带有标记的valgrind-command-}} / usr / sbin / foo-daemon
请确保将输出重定向到定义明确的位置。
警告 :使用valgrind运行的守护进程可能非常慢,并且可能无法按预期运行