如何在 C++ 中分析和捕获双重删除和内存损坏
Posted
技术标签:
【中文标题】如何在 C++ 中分析和捕获双重删除和内存损坏【英文标题】:How to profile and capture double deletion of and memory corruption in c++ 【发布时间】:2010-05-12 20:34:28 【问题描述】:我有我用 VS 2008 在 windows 7 上用 c++ 编译的应用程序 我遇到了异常,我试图抓住这个我创建的 pdb 文件(因为我在发布时编译)。并查看堆栈的一部分,但它没有给我提示错误在哪里。 我正在寻找免费的方法来解决这个错误。你能推荐一些免费的方法吗?
【问题讨论】:
【参考方案1】:Visual C++ 内置了相当不错的 C 运行时内存调试工具。
请参阅#define _CRTDBG_MAP_ALLOC
,或阅读:The CRT Debug Heap 和 Memory Leak Detection Enabling。
它可以检测到:
内存泄漏 双重删除 在分配的内存结束后写入如果您有一个可重现的情况,即问题分配总是同时发生,您可以使用 set it 来闯入该分配的调试器。
还有 BoundsChecker、HeapAgent 和 Purify 等商业工具,以及 Fortify 等免费工具,当然您也可以自行开发,但使用内置的 VisualStudio 可以获得很长的路要走。
【讨论】:
柯蒂斯。您是否有 Fortify 下载的链接?提前致谢。 我可以在发布模式下测试它吗? co'z它在哪里是我调试的问题它工作正常 @ossandcad:看起来它最后的安息之地是 Geocities。我在这里找到了一份副本:gnu-darwin.org/www001/src/ports/devel/adime/work/adime-2.2.1/… - IIRC 2.2 是最新版本。 @user63898:我不确定,我想你可以,但可能有很多麻烦。如果有任何帮助,我已经做了很多调试发布版本,并且您在调试中看不到的发布中看到的问题(一旦您考虑到assert()
等等)几乎总是未初始化的变量和竞争条件.也许这会给你一些开始的地方?以上是关于如何在 C++ 中分析和捕获双重删除和内存损坏的主要内容,如果未能解决你的问题,请参考以下文章