在 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】:

能否修改代码以使用mallocfree 的调试版本?如果是,请检查_malloc_dbg 和_free_dbg。

(您可以根据这些函数编写自己的newdelete 运算符。)

我记得 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 中,哪些调试工具可以很好地找到内存泄漏的位置?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 怎么编译,怎么调试?

VS 2022 .NET 6.0“调试时总是启动”

Visual C++开发工具与调试技巧整理[2]

怎样用VS2017开发android

C++ MFC VC 6.0 到 VS2013 lStreamReturn = GetRichEditCtrl().StreamIn(SF_RTF, es);

vs2013中用MFC和C++创建程序后,工具箱中的控件全部显示灰色,无法拖进对话框。