none
请教内存泄漏的测试工具和方法 RRS feed

答案

  • BoundsChecker VC插件,安装后用这个工具跑一下程序,在跑程序的过程中会给出警告,能定位到代码行,使用比较傻瓜化,是收费软件。
    • 已标记为答案 XuesongGao 2009年9月16日 0:57
    2009年9月15日 6:58
  • 重载new和delete,在里面加上计数器,若是程序结束,计数器不为0就是有泄漏.复杂一点的话就是建立一个数组,把new返回的所有地址都保存起来,把调用时的函数调用堆栈也保存起来,在delete的时候释放,用这种方法,你还可以精确到是哪个函数new的内存没有释放.

    或者用detours直接把HeapAlloc给钩出来,方法和效果与重载new类似。
    0xBAADF00D
    • 已标记为答案 XuesongGao 2009年9月16日 0:57
    2009年9月15日 14:53
    版主

全部回复

  • 我使用的是windos XP + VS2005 VC++开发的Windows Service服务
    Cedar
    2009年9月15日 6:57
  • BoundsChecker VC插件,安装后用这个工具跑一下程序,在跑程序的过程中会给出警告,能定位到代码行,使用比较傻瓜化,是收费软件。
    • 已标记为答案 XuesongGao 2009年9月16日 0:57
    2009年9月15日 6:58
  • thanks
    VS2005 自带的有内存泄漏的检查工具吗
    Cedar
    2009年9月15日 7:00
  • 貌似没有。。。
    2009年9月15日 7:52
  • VS2008Teamsuit版本带有分析工具
    麻烦把正确答案设为解答。
    2009年9月15日 9:02
    版主
  • MFC里面也有,参考一下自己写一个类似的也不难

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年9月15日 13:35
    版主
  • 重载new和delete,在里面加上计数器,若是程序结束,计数器不为0就是有泄漏.复杂一点的话就是建立一个数组,把new返回的所有地址都保存起来,把调用时的函数调用堆栈也保存起来,在delete的时候释放,用这种方法,你还可以精确到是哪个函数new的内存没有释放.

    或者用detours直接把HeapAlloc给钩出来,方法和效果与重载new类似。
    0xBAADF00D
    • 已标记为答案 XuesongGao 2009年9月16日 0:57
    2009年9月15日 14:53
    版主
  • 这个想法不错,您已经实现并使用了吗


    Cedar
    2009年9月16日 0:58
  • 开发的windows service 服务占用内存不断增大的原因是什么呢
    通过boundschecker测试暂时还没有发现内存泄漏的故障,难道Windows系统使service占用内存不断增加吗
    Cedar
    2009年9月16日 1:37
  • 还是这个问题,程序运行过程当中占用的内存不断增大是什么原因
    使用boundschecker测试了一下,没发现有内存泄漏的情况发生
    Cedar
    2009年9月16日 2:33
  • 还是这个问题,程序运行过程当中占用的内存不断增大是什么原因
    使用boundschecker测试了一下,没发现有内存泄漏的情况发生
    Cedar
    2009年9月16日 2:33
  • 自己看看内存里面是什么

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年9月16日 3:32
    版主