在 VS C++ 6.0 中,哪些调试工具可以很好地找到内存泄漏的位置?
Posted
技术标签:
【中文标题】在 VS C++ 6.0 中,哪些调试工具可以很好地找到内存泄漏的位置?【英文标题】:In VS C++ 6.0, what debug tools are good to find where memory is leaking? 【发布时间】:2012-05-16 20:00:57 【问题描述】:我的程序最终会消耗所有内存并崩溃...查看代码,我找不到任何可以做到这一点的突出内容。
【问题讨论】:
这是一个问答网站。您可以在 cmets 中感谢答案,但在您的问题中这样做是不受欢迎的。 你可以试试memory profiler。 这里没有足够的信息来回答您的问题。你的程序是做什么的?它是一个服务器进程,为客户服务吗?它多久做一次事情?您分配了哪些内存?你什么时候释放那个内存?除了看,你还尝试过什么? @Greg:我认为这个问题仍然有效,尽管这是一个有点广泛和基本的问题。尤其是因为 VS6 现在很古老,现代工具/方法可能不适用于它。 【参考方案1】:能否修改代码以使用malloc
和free
的调试版本?如果是,请检查_malloc_dbg 和_free_dbg。
(您可以根据这些函数编写自己的new
和delete
运算符。)
我记得 VS 6.0 没有 _realloc_dbg
。
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC 1
#include <Crtdbg.h>
#define malloc(size) _malloc_dbg(size,_CLIENT_BLOCK,__FILE__,__LINE__)
#define free(addr) _free_dbg(addr,_CLIENT_BLOCK)
#endif
【讨论】:
【参考方案2】:您可以尝试 BoundsChecker(现为 DevPartner):http://www.microfocus.com/products/micro-focus-developer/devpartner/index.aspx
您将能够在您的代码中看到内存泄漏、接口泄漏和其他问题。
【讨论】:
【参考方案3】:根据泄漏的类型,您可以使用 umdh 或 debugdiag 作为简单工具,否则我会推荐使用 windbg。所有这些都是免费的,并且是 Windows 调试工具的一部分,您可以谷歌搜索所有这些工具的教程。在windbg中自动查漏的命令是!heap -l。
【讨论】:
以上是关于在 VS C++ 6.0 中,哪些调试工具可以很好地找到内存泄漏的位置?的主要内容,如果未能解决你的问题,请参考以下文章
C++ MFC VC 6.0 到 VS2013 lStreamReturn = GetRichEditCtrl().StreamIn(SF_RTF, es);