如何对守护程序执行内存检查? 我编写了一个C++应用程序,它一直运行到手动终止。 它监视其他重要的应用程序。因此,我的守护程序应用程序不应该停止运行。 记住这一点,我想看看我的应用程序中是否有内存泄漏。 我使用了valgrind,但由于此应用程序一直运行,valgrind不会退出。如果我做了一个控件-C,那么我不会从valgrind日志文件中获得完整的信息

如何对守护程序执行内存检查? 我编写了一个C++应用程序,它一直运行到手动终止。 它监视其他重要的应用程序。因此,我的守护程序应用程序不应该停止运行。 记住这一点,我想看看我的应用程序中是否有内存泄漏。 我使用了valgrind,但由于此应用程序一直运行,valgrind不会退出。如果我做了一个控件-C,那么我不会从valgrind日志文件中获得完整的信息,c++,memory-management,memory-leaks,valgrind,memory-leak-detector,C++,Memory Management,Memory Leaks,Valgrind,Memory Leak Detector,有没有一个工具可以像Valgrind那样做?最明显的方法是添加一种干净的方法来关闭守护程序,可能是捕获SIGTERM信号,然后关闭。否则,当您杀死守护进程时(合法地)使用的任何内存都会使结果复杂化 或者有VALGRIND\u DO\u LEAK\u CHECK VALGRIND\u DO\u ADDED\u LEAK\u CHECK VALGRIND\u DO\u CHANGED\u LEAK\u CHECK,您可以在守护进程中触发它,可能是在计时器上。然后比较结果可能会告诉您任何泄漏。如果不在

有没有一个工具可以像Valgrind那样做?

最明显的方法是添加一种干净的方法来关闭守护程序,可能是捕获SIGTERM信号,然后关闭。否则,当您杀死守护进程时(合法地)使用的任何内存都会使结果复杂化


或者有VALGRIND\u DO\u LEAK\u CHECK VALGRIND\u DO\u ADDED\u LEAK\u CHECK VALGRIND\u DO\u CHANGED\u LEAK\u CHECK,您可以在守护进程中触发它,可能是在计时器上。然后比较结果可能会告诉您任何泄漏。

如果不在某个点退出,就无法检测到泄漏。我想你可以使用valgrind,在5分钟后离开deamon。然后valgrind会报告你的泄漏。请记住,如果您的deamon由于算法中的逻辑缺陷而持续分配内存,它仍然可能会在代码中没有任何泄漏的情况下耗尽内存。

我相信您可以将gdb连接到正在运行的valgrind进程,并指示它显式运行泄漏检查

我没试过这个,只是在电视上看到的

如果链路断开:

将GDB连接到Valgrind gdbserver (error参数是gdbserver激活之前的错误数:零表示它立即开始运行)

然后在程序上启动gdb并连接到远程目标

$ gdb ./prog
(gdb) target remote | vgdb
并触发检查

(gdb) monitor leak_check full reachable any

查看您的文档或链接文档以了解详细信息。

只是检查我是否理解您的意思。你是说我应该在程序中找到终止的方法?@AlwinDoss是的-如果你添加了一种方法来彻底关闭你的守护程序,那么valgrind可以运行并给你所有的漏洞;假设您在终止期间清除了所有已知的内存分配。
(gdb) monitor leak_check full reachable any