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

标签 c linux debugging memory-leaks

出于好奇,我有一个关于检查内存泄漏的问题。

作为在过去一两年中经常使用 valgrind 检查我的代码中的内存泄漏的人,我突然想到它只检测丢失/未释放的内存 程序的生命

因此,鉴于此,我在想,如果您有一个长时间运行的程序,其中 malloc() 会间歇性地运行并且不会 free()在应用程序退出之前,占用内存的可能性(不一定通过泄漏)是巨大的,并且使用这些工具无法观察到,因为它们只在程序生命周期后检查。是否有类似 GDB 的工具可以在运行时停止应用程序并检查在应用程序的实例中引用和未引用的内存?

最佳答案

Are there GDB-like tools which can stop an application while running and check for memory which is and isn't referenced at an instance in the life of the application?

是的:Valgrind。

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

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

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

认为您还可以要求它列出未泄漏的新分配。

关于检查正在运行的程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945885/

相关文章:

c - 在 GCC 中使用自定义主加载器

c++ - 清除 Linux 内核链表

linux - 使用 awk 删除多次出现的子字符串

python - 使用 WingIDE 调试 Python bottle 应用程序

javascript - 不断收到语法错误 : missing ) after argument list

c - 我在哪里可以学习链接列表/堆栈?

c - 在 C 中查找整数中最高设置位(msb)的最快/最有效的方法是什么?

c++ - 为什么 libcurl 需要 `CURLOPT_NOSIGNAL` 选项,启用后有什么副作用?

c++ - Linux 透明窗口

c++ - 无法追踪 Qt 程序崩溃的原因