我有一个C ++应用程序,它是一个Linux守护程序(我使用一个fork来使它成为守护进程),基于此守护程序示例http://www.itp.uzh.ch/~dpotter/howto/daemonize中的代码。我试图用valgrind找到内存泄漏:
/usr/bin/valgrind.bin --suppressions=/usr/lib/valgrind/debian-libc6-dbg.supp --tool=memcheck --child-silent-after-fork=no --trace-children=yes --leak-check=full --show-reachable=yes /usr/sbin/<my daemon>
但是valgrind在初始进程死后立即退出,而应用程序仍在子进程中工作。 如果我注释掉退出初始进程的代码,那么valgrind继续工作。但这不是一个干净的解决方案。 如果没有它,我怎么能让valgrind工作?
答案 0 :(得分:0)
Valgrind的常见问题解答明确表示它无法附加到已经运行的进程中。我想他们所有的仪器设置也都在fork()上丢失了 他们确实提到了一个听起来很复杂的解决方法(here),但我认为它会增加更多不必要的复杂性而不仅仅是守护进程。