上周从周五开始疯狂修仙,累的一批。
周日正美滋滋的睡着回笼觉,准备补回觉,突然被一个电话打过来去公司查软件内存泄漏问题(连续查了两天)。
当时软件的情况是24 小时内存增加600mb内存,而验收标准是连续跑24 * 7小时,所以对于32位程序来说将达到4.2GB
会出现内存无法分配的情况(超出32位指针访问地址的上限)。
分析问题使用的方法有两种:
一、第一阶段
目测法:
通过注释部分模块,加速运行的方法,查看任务管理器,有无内存泄漏。
时间:1天
结果:不能查找出,感觉很多模块都没有泄露,又都有略微增长。
二、第二阶段
时间:1天
工具法:使用内存泄漏检测工具
使用了的工具有:VLD(Visual Leak Detector),tMemoryMonitor,WinDbg
其中WinDbg是在运行中抓取前后两次内存数据,然后对内存数据进行对比的方式,对抓取的时间节点很考究。
VLD和tMemoryMonitor都是运行结束后再进行生成泄漏报告的方式
VLD需要修改源代码,增加头文件(可以支持Debug版和Release版),会大大降低程序运行的速度。
tMemoryMonitor只支持Release版