混合模式项目的内存泄漏检测:托管,非托管和本机

我有一个包含C#(托管),C ++ / CLI(非托管)和纯C ++(本地)项目的Visual Studio 2010解决方案。 我想在所有3个项目中执行内存泄漏检测,或者至少在本机代码周围执行内存泄漏检测:

  • C#项目引用了非托管dll(我可以访问常用的.NET Memory Profiling工具,因此运行内存分析并不是一个真正的问题)。
  • C ++ / CLI是本地C ++库的一个非常薄的包装器,所以我不需要描述它(不担心它)。
  • C ++本机代码是最难以描述的代码。
  • 我已经尝试过使用英特尔Inspector XE 2011,但它太慢了......做一些简单的事情,比如仅仅初始化我的系统,花了很长时间,甚至还没有看到它完整。 当我在没有IXE 2011的情况下运行我的系统时,初始化我的系统需要不超过10-15秒的时间,而使用IXE我们已经让它运行了几个小时,并且不会过去初始化。 我试图排除某些库被分析,但它绝对没有影响。

    我试过使用Visual Leak Detector,但是在完成运行后,它说它找不到任何内存泄漏。 我对这个结果感到怀疑,所以我故意将一段代码放在一个频繁运行的函数中,以确保存在内存泄漏:

    int* memoryLeak = new int;
    

    我再次与VLD一起运行,但它吐出了同样的信息。 我正在考虑覆盖new / delete操作符,甚至只是malloc / free ,但我想确保我已经用尽了所有其他选项,然后再深入研究。

    我可以通过Visual Studio 2010分析我的本机C ++库的内存使用情况? 是否还有其他工具或技术可以工作(即使它们没有与VS2010集成)?


    在.NET中,即使您使用托管对象,也可能有一些永远无法处理的东西(请查看一些示例:C#中的内存泄漏)。

    关于本地部分,您可以使用两种不同的方法:

  • 使用不同的内存分析器软件,许多列在这里:是否有良好的Valgrind替代Windows?

  • 将源代码更改为使用debug malloc / new并在代码中打印分配的位置:http://www.flipcode.com/archives/Detecting_Memory_Leaks.shtml


  • 进行单元测试,测试单元是否存在内存泄漏:http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

    在分配对象之前获取第一个内存状态,在释放它之后获得第二个内存状态。 比较你的记忆状态。

    你也可以尝试使用valgrind,devpartner等其他profiler。

    链接地址: http://www.djcxy.com/p/9787.html

    上一篇: Memory leak detection for mixed mode projects: managed, unmanaged and native

    下一篇: How to create a normal password