检查正在运行的程序中的内存泄漏

Dod*_*ddy 5 c linux debugging memory-leaks

我有一个问题是出于对检查内存泄漏的好奇心.

作为一个valgrind经常用于检查我的代码在过去一两年中是否存在内存泄漏的人,我突然想到它只能在程序生命周期之后检测丢失/不一致的内存.

所以,考虑到这一点,我想如果你有一个长期运行的程序malloc()是间歇性的,free()直到应用程序退出,那么吃内存的可能性(不一定是通过泄漏)是巨大的,而不是使用这些工具可观察,因为它们只在程序生命周期后检查.是否有类似GDB的工具可以在运行时停止应用程序并检查应用程序生命周期某个实例是否存在的内存?

Emp*_*ian 3

是否有类似 GDB 的工具可以在运行时停止应用程序并检查应用程序生命周期中某个实例引用和未引用的内存?

是的:瓦尔格林德。

具体来说,SVN 版本的 Valgrind 中嵌入了一个 gdbserver 存根。

这允许您进行各种很酷的调试,这在以前是不可能的:

  • 您可以在valgrind下运行程序同时具有GDB断点
  • 你可以问valgrind:这个内存分配了吗?这个变量被初始化了吗?
  • 你可以问 valgrind:自从我上次请求泄漏以来,发生了哪些新的泄漏?

你也可以要求它列出未泄漏的新分配。