在C++的开发中经常会出现内存泄露,尤其服务开发,一个很小的内存泄露就可以导致很严重的问题。最终我们的程序会因以下两个错误崩溃。1. The application has no enough resource to display。2. The application crash with a log like "memory allocation failed"。
Windug可以很方便的解决这个问题。
第一:配置Symbol File Path。
Configure the symbol file path to the Microsoft symbol server。SRV*c:\symbols*http://msdl.microsoft.com/download/symbols”
第二:配置Source File Path。
Add your program EXE/DLL PDB (program database) path to the symbol file path.(exe或dll所在的绝对路径)
第三:配置操作系统的标志,以便用户堆栈跟踪有内存泄漏的进程。
Gflags.exe -i excel.exe +ust 备注:excel 为要监测的进程名称 GFlags.exe在Windug的安装目录下:我的是C:\Program Files\Debugging Tools for Windows (x86) 在运行该命令前需要cd到当前路径下,命令是cd C:\Program Files\Debugging Tools for Windows (x86)
第四:用Windug Attach到该进程,程序运行结束后Windug 的Command窗口会提示有内存泄露,如图:
如图有两处内存泄露,此时可以在泄露的内存地址上进行分析。
第五:分析输入如下指令。!heap -p -a 0x021F0040
第六:结果分析
在OnBnClickedButtonNewmemory的函数中存在内存泄露。以上结果仅供参考