近期某处windows版本程序发生故障,归结原因为内存泄露导致资源不足。
前面出现几次都没解决,这次落到我头上了。
今日上班时间已经试图将内存增加的情况复现,班车上就在搜相关资料,路上搜到的是用c运行时库函数_CrtDumpMemoryLeaks来检查,回到家后首先找到了Visual Leak Detector的使用
下载了VLD-1.9h的安装包,他的使用包含dll,lib库及include。也含有src代码,可以自己编译dll及lib。
首先安装,假设安装到d:/Program Files/Visual Leak Detector。安装完后会有说明文档,包括在vc下的设置等。
在该安装目录下游vld.ini,修改里面的
ReportTo值为both,表示debugger及file都产生输出
ReportFile值设为文件路径及文件名
StartDisabled则根据情况设置,默认为no即程序启动就算开始。
在需要分析的程序中,其开始及大部分线程的情况不是当前关注的重点,则可以设为yes,不启动,随后在某个线程内增加代码VLDEnable();用于启动此检测。
当只需要分析某一段代码时则可灵活的增加VLDEnable(); VLDDisable();进行控制。
当当前重点问题解决,继续分析所有代码时则可以将其设为no,以便全部检测。
待明天试验其效果了......
附:测试输出效果
Visual Leak Detector Version 1.9h installed.
Outputting the report to the debugger and to E:/Develop/test/console/Debug/memory_leak_report.txt
Starting with memory leak detection disabled.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 0 at 0x00280F28: 100 bytes ----------
Call Stack:
e:/develop/test/console/test.c (38): main
crt0.c (206): mainCRTStartup
0x77221194 (File and line number not available): BaseThreadInitThunk
0x7744B495 (File and line number not available): RtlInitializeExceptionChain
0x7744B468 (File and line number not available): RtlInitializeExceptionChain
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD ........ ........
---------- Block 1 at 0x00280FD0: 600 bytes ----------
Call Stack:
e:/develop/test/console/test.c (17): funtest
e:/develop/test/console/test.c (39): main
crt0.c (206): mainCRTStartup
0x77221194 (File and line number not available): BaseThreadInitThunk
0x7744B495 (File and line number not available): RtlInitializeExceptionChain
0x7744B468 (File and line number not available): RtlInitializeExceptionChain
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD ........ ........
Visual Leak Detector detected 2 memory leaks.
Visual Leak Detector is now exiting.