GMi*_*ael 4 c++ linux memory-leak-detector
我们有一个在Linux上运行的大型多线程C++应用程序.我们看到应用程序内存占用的速度越来越快,并且相信存在一些泄漏.我们已经尝试了我们拥有的每一种工具(valgrind,DynLeak,Purify),但没有找到任何东西.由于此应用程序可以在Windows上运行,我们还尝试了Bounds Checker.也没有帮助.
我们需要一种可以提供帮助的新工具.我查看了Google Perfomrance Tools,MMGR by Paul Nettle,MemCheck Deluxe.他们都没有给我留下深刻印象.
这个任务有什么好的工具吗?
C/C++中内存泄漏的定义非常具体:它是已分配的内存,然后指针被覆盖或以其他方式丢失.Valgrind通常会开箱即用,但事情并非总是如此简单.
您的应用程序很可能仍在使用该内存.在这种情况下,您可能拥有Java程序员认为泄漏的内容,例如在结构中输入数据而很少(或从不)删除条目.
您可能错误地测量了内存的内存使用情况.在Linux上,内存使用量测量并不像它们看起来那么简单.你是如何衡量你的内存使用量的?
您应该考虑使用您正在使用的任何内存分析工具的应用程序挂钩(Valgrind称之为客户端请求),以避免报告仅在程序终止时发出的问题.使用这些钩子可能会帮助您精确定位泄漏的位置.
你应该尝试使用堆分析器,如地块从Valgrind的,以寻找与无节制的数量分配内存的内存分配位置.
确保您的应用程序中没有使用自定义分配器或垃圾收集器.据我所知,没有内存分析工具可以在没有用户干扰的情况下使用自定义分配器.
如果您的内存泄漏量足以在可接受的应用程序运行时间内检测到,您可以尝试通过版本控制系统对旧版本进行二进制搜索,以识别引入问题的提交.至少Mercurial 和Git为此任务提供内置支持.
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |