定期打印长时间运行的 C++ 程序的分析以检测内存泄漏?

定期打印长时间运行的 C++ 程序的分析以检测内存泄漏?

我有一个C++编译后的程序 (an ELF binary),旨在永久运行,类似于 HTTP 服务器。我想用瓦尔格林德分析程序是否存在内存泄漏。然而,Valgrind 通常会在程序退出后打印其输出和分析结果。有没有办法配置 Valgrind 在程序仍在运行时定期打印其分析?

如果 Valgrind 不支持此功能,我有兴趣知道是否有替代方案可以实现这一点。

我正在使用的程序旨在作为嵌入式设备上的服务运行。考虑到这一点,即使是很小的内存泄漏,如果最终触发 Linux OOM Killer,导致程序终止,也可能会出现问题。

这里的主要目标是跟踪内存泄漏(或其他内存损坏)并记录这些违规的内存地址(这样我就可以使用以下命令找到这些内存违规的起源)拆卸技术)。

我发现有这个答案PID,这建议使用进程和文件检查进程的内存使用情况/proc/PID/smaps。通过使用 diff 命令,我可以比较特定时间和未来时间之间的内存消耗,以识别任何差异。有了这些信息,我就可以使用 GDB core dumgcore -o processstrings完成我的分析。

我只是想知道是否有更好的方法来做到这一点(在我看来,这似乎是一个太多的手动过程)。

已经考虑使用 Valgrind 并将我的服务限制为运行 24 小时,然后检查 Valgrind 的输出是否存在任何问题。然而,我相信,如果我的程序可以间歇性运行 24 小时,并不能保证它会连续运行多年,如果你明白我的意思的话。

相关内容