出于好奇,我有一个关于检查内存泄漏的问题。
作为在过去一两年中经常使用 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/