代码之家  ›  专栏  ›  技术社区  ›  Steven Smethurst

内存泄漏单元测试c++

  •  5
  • Steven Smethurst  · 技术社区  · 14 年前

    我刚刚解决了应用程序中的内存泄漏问题,现在我想编写一个单元测试,以确保这种情况不会再次发生。

    例如:

    long mem_used= GetMemUsed(); 
    /* Do some work */
    /* clean up */
    
    if( mem_used != GetMemUsed() ) {
        Error( "Memory leek" ); 
    }
    

    我已经找到了很多方法来检测整个系统中的内存使用情况,但是没有一种方法只适用于当前的应用程序。

    建议,链接,代码片段?

    6 回复  |  直到 14 年前
        1
  •  6
  •   Ferruccio    14 年前

    Boost.Test 将在测试运行结束时自动告诉您是否有任何单元测试泄漏了内存。

    我不知道其他C++单元测试框架是否提供了这种功能。

        2
  •  5
  •   Ed Swangren    14 年前

    ValGrind 为了这种事。这些工具已经存在;您不需要编写自己的单元测试来检测内存泄漏。

        3
  •  4
  •   doron    14 年前

    functions 获取内存分配统计信息。假设没有延迟分配,您应该在执行测试之前和之后将相同的内存提交给malloc。

        4
  •  3
  •   Edward Strange    14 年前

    这不是单元测试。如果您想确保应该管理资源的某个单元不会泄漏该资源,那么您需要验证它所管理的资源是否在正确的时间被删除。你可以用mock对象来实现这一点,mock对象在构造时递增计数器,在删除时递减…然后确保计数正确。

        5
  •  0
  •   miteshyh Steve    4 年前

    你也可以使用 ( gtest )然后使用谷歌性能工具( gperf

    Valgrind 确认是否有泄漏时,有疑问,但更喜欢 . 其中一个问题是,如果您使用 gperf公司 内存库并尝试使用 ,它不会发现任何问题,因为它捕捉到了泄漏,所以您需要在切换之间清除编译,或者获得项目的第二个副本。

        6
  •  -1
  •   Russ    14 年前