关于网友提出的“ 求查找内存泄漏的方法,或工具”问题疑问,本网通过在网上对“ 求查找内存泄漏的方法,或工具”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求查找内存泄漏的方法,或工具描述:
由于程序很大,用boundscheck这些工具都很慢,无法忍受,不知哪位高手有一些比较好的查找内存泄漏的方法。现在程序的memory leak很多都是GDI方面的,还有处理字符串的
解决方案1:
用purify 2003。
解决方案2:vs.net里面有内存泄漏监测功能,可以一用
解决方案3: softice
书店有这方面的使用说明书!!!
还有就是---------段钢新出的那本《加密,解密》。。
9月份的《程序员》上有一篇书评,说是上面有SOFTICE的使用说明,我今天也见到这本书了
但是现在功力还不够,先买了一本-------罗的《windows环境下32位汇编语言。。。》
你可以先看看《加密,解密》。。
上有没有,是不是符合你的要求!!!
再说说无防
解决方案5: 我用的是 guoxiny(狼) 的办法,笨是笨了的,我自认为很有效。
另外在说一个没出息的办法,在怀疑有泄露的地方让他多次循环,让他漏得多一点,通过windows任务管理器的性能就可以看出来。
方法不好,不能大用。见笑了。
Bounds Check
项目越大越慢
超过50个模块的话就可以死掉了...
BoundCheck是比较慢,程序比较大的话,我们这里通常是逐块测试,就是所谓的单元测试,一个个功能模块分开来测试。
通常Memory Leak都是Pointer影响的,但是如果是MT编程,那么启动和禁止Thread和多个Thread之间通讯很容易Memory Leak,处理这里问题尤其简直是个噩梦。
可以自己用mfc的类来检查
解决方案9: 用rational purify吧,弄个好机子
强!
解决方案11:楼上的强啊,不知道这个#define有什么来头,给讲讲吧?
解决方案12:我前一阵刚完成了一个内存管理的程序 使用VC 你如果想要,我可以给你!
解决方案13: memory mapper, you can see how much ram has been allocated.
May u good luck
BoundCheck!
解决方案15:俺同意楼上的。
解决方案16: 俺只用过BoundsCheck,个人感觉
内存检查的工具都只能检查出那些明显的错误,而这些错误对于成熟的程序员来说
遵守良好的编程习惯和约束规范就都能够避免
而那些复杂的内存泄漏,工具也查不出来
还得在代码上保证,跟踪调试
当然,这类工具还是非常非常有用的,只是俺用过的dd太少
真的不能在设计时杜绝吗?
解决方案18:非 MFC 的呢?
解决方案19: 我有一个方法,不过必须是在debug下:
1 #include
2 在文件开头加上:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
3 按F5进入调试状态,如果在Output的debug窗口有一句"Detected memory leaks!"说明有内存泄漏,双击Output的Debug窗口检测到的内存泄漏例出的行,就可以到达内存泄漏代码行的位置。
俺的方法比较笨。
首先,根据在编写程序中的各种情况,做一个初步的判断,把可能出现遗漏的地方跟踪调试;如果不这儿,再找下一个;如果所有自己认为可能有遗漏的地方都,没有问题的话;就进行下一步更笨的方法;
从程序启动的入口开始,一步一步往下走,通过注释代码,来判断是否有遗漏。
方法虽然比较笨,可是我还是这样找到了一些想都没想到的内存遗漏。